private async _importPage()

in src/Common/ProcessImporter.ts [209:243]


    private async _importPage(targetLayout: WITProcessDefinitionsInterfaces.FormLayout, witLayout: IWITLayout, page: WITProcessDefinitionsInterfaces.Page, payload: IProcessPayload) {
        if (!page) {
            throw new ImportError(`Encountered null page in work item type '${witLayout.workItemTypeRefName}'`);
        }

        if (page.isContribution && this._config.options.skipImportFormContributions === true) {
            // skip import page contriubtion unless user explicitly asks so
            return;
        }

        let newPage: WITProcessDefinitionsInterfaces.Page; //The newly created page, contains the pageId required to create groups.
        const createPage = Utility.toCreatePage(page);
        const sourcePagesOnTarget = targetLayout.pages.filter(p => p.id === page.id);
        try {
            newPage = sourcePagesOnTarget.length === 0
                ? await Engine.Task(() => this._witProcessDefinitionApi.addPage(createPage, payload.process.typeId, witLayout.workItemTypeRefName),
                    `Create '${page.id}' page in ${witLayout.workItemTypeRefName}`)
                : await Engine.Task(() => this._witProcessDefinitionApi.editPage(createPage, payload.process.typeId, witLayout.workItemTypeRefName),
                    `Edit '${page.id}' page in ${witLayout.workItemTypeRefName}`);
        }
        catch (error) {
            logger.logException(error);
            throw new ImportError(`Failed to create or edit '${page.id}' page in ${witLayout.workItemTypeRefName}, see logs for details.`);
        }
        if (!newPage || !newPage.id) {
            throw new ImportError(`Failed to create or edit '${page.id}' page in ${witLayout.workItemTypeRefName}, server returned empty result.`);
        }

        page.id = newPage.id;
        // First pass - process inherited groups first (in case a custom group uses inherited group name causing conflict)
        await this._importInheritedGroups(witLayout, page, payload);

        // Second pass - process custom groups and controls 
        await this._importOtherGroupsAndControls(witLayout, page, payload);
    }