Understanding the steps in PublicationOutput Create method

Describes the different steps in PublicationOutput Create method

  1. Validate incoming parameters

    During this step the following checks are executed:
    • All required parameters are present
    • No system fields are supplied
    • All parameters contain a valid value
    • In order to check this, the incoming output format and language combination are converted into lists with LovValue items.
  2. Initialize the folder (if provided)

    Validate the incoming folder upon existence and correctness of folder type

    Retrieve the folder security fields and temporary store the security fields

  3. Validate the incoming LogicalId

    • If no LogicalId is provided, a new LogicalId is generated using a new GUID
    • If a LogicalId is provided, check whether the logical object already exists or not
  4. Check that the user has write access to the folder or logical object
  5. Start transaction

    • If the logical object exists, the logical object is locked
  6. Initialize logical object (in memory)

    • If the logical object does not exist, create the logical object (in memory) . Copy the security fields from the folder
    • Otherwise, initialize all necessary metadata
  7. Initialize version object (in memory)

    • If the version object does not exist, create the version object (in memory)
      • If the baseline is not provided, create a new baseline.
        • If the previous version of the publication output exists, create a copy of the baseline
        • Otherwise, create an empty baseline
      • If the baseline complete mode is not provided, initialize the baseline complete mode with the default value (VBASELINECOMPLETEMODELATESTAVAILABLE)
    • Otherwise, initialize all necessary metadata
  8. Create the language object (in memory)

    • If the status is not provided, initialize the status with the default value (VPUBSTATUSTOBEPUBLISHED)
    • Create the revision object and set the blob related fields
  9. Check the initial status and set the status type
  10. Initialize the plugin engine

    • Find the Plugin Configuration Xml
    • Conditionally filter the Plugin Configuration Xml using the following conditions:
      ConditionNameCondition on...Example
      ISHType ISHPublication
      FMAPIDThe unique identifier of the logical level (= LogicalId) 
      VERSIONThe version number1.1.1
      FISHPUBLNGCOMBINATIONThe language combinationen+fr
      DOC-LANGUAGEThe individual languages used in the language combinationfr
      FISHOUTPUTFORMATREFThe label of the output formatPDF (A4 Manual)
      EDTThe EDT specified on the output formatEDTPDF
      ISHUserGroupThe element name of the usergroupVUSERGROUPSYSTEMMANAGEMENT
      CurrentActionThe current actionCreate
      ISHLevel

      The level

      logical, version, lng
    • Initialize the plugins.
  11. Retrieve the metadata used by the plugins
  12. Run the plugins

    • All plugins are executed in order specified in the Plugin Configuration Xml
    • If the plugin fails, an ErrorRunningPlugin exception is thrown. This exception always wraps the exception which is thrown by the plugin itself.
  13. Check the initial status and set the status type
  14. Update the information in the database:
    • Create all objects and set the new metadata
    • Link the version object with the logical object
    • Link the language object with the version object
    • Link the language with the new revision object
  15. When creating a new logical object...

    • Lock the parent folder
    • Retrieve the folder security fields, check that the values match the ones stored in the step 2
    • Link the logical object with the parent folder
  16. Start the background tasks from the plugins
  17. Commit the transaction