Member Junction
    Preparing search index...
    interface PersistSchemaOptions {
        CatalogSource?: "Shared" | "PerConnection";
        CompanyIntegrationID?: string;
        ContextUser: UserInfo;
        DeactivateAbsent?: boolean;
        DeactivateAbsentFields?: boolean;
        DeactivateAbsentObjects?: boolean;
        IntegrationID: string;
        Provider?: IMetadataProvider;
        SourceSchema: SourceSchemaInfo;
        UseTransactionGroup?: boolean;
    }
    Index

    Properties

    CatalogSource?: "Shared" | "PerConnection"

    Which catalog this discovery persists into.

    'Shared' is the default and is bytes-identical to the behaviour before the per-connection catalog existed, so the tables can be created, backfilled and verified against live traffic before anything reads or writes them.

    'PerConnection' requires CompanyIntegrationID and REFUSES rather than falling back: a silent shared write would put one connection's discovery into every other connection's catalog, which is the failure the whole design exists to remove, and it would report success.

    CompanyIntegrationID?: string

    The connection this discovery belongs to. Required to write the per-connection catalog; the IntegrationID stays alongside it because the declared floor a discovery overlays is still looked up by connector, and because a per-connection row carries it denormalised.

    ContextUser: UserInfo
    DeactivateAbsent?: boolean

    When true, declared IntegrationObjects that are ABSENT from this discovery are deactivated (Status='Disabled') so ApplyAll never materializes a table for them — avoiding thousands of phantom empty tables and the per-entity CodeGen/advancedGen cost they incur. Set ONLY by a COMPREHENSIVE refresh that probed every object (endpoint 404/empty = confidently absent); a requested-subset ApplyAll must leave it false, or it would deactivate objects it never checked. Object-level only — field-level absence (a field null across the data sample is NOT proof of absence) is deliberately not deactivated here. Deactivate, never delete: the IO + its column are preserved, and the CustomColumnPromoter reactivates them if the object reappears.

    DeactivateAbsentFields?: boolean

    The FIELD half of DeactivateAbsent, separately gateable. Defaults to DeactivateAbsent.

    Per object the field list is complete, so absent fields may retire there; the final name pass carries name stubs with no fields, so retiring fields there would disable every column of every object. Still gated on an authoritative source, exactly as DeactivateAbsent is.

    DeactivateAbsentObjects?: boolean

    The OBJECT half of DeactivateAbsent, separately gateable. Defaults to DeactivateAbsent.

    A streaming discovery persists one object at a time and then the complete set of object NAMES, and the two retirements belong to opposite moments: per object, the object's own field list is complete but every OTHER object looks absent, so objects must not retire there; in the final name pass the whole name set is known, so absent objects may retire. Still gated on an authoritative source, exactly as DeactivateAbsent is.

    IntegrationID: string
    SourceSchema: SourceSchemaInfo
    UseTransactionGroup?: boolean

    When true, persistence runs through a TransactionGroup batch — substantially faster on large schemas (Salesforce ~1,800 sobjects). Set false for diagnostic runs where per-record error visibility matters. Default: true.