Skip to content

SAIF.Services.Appworx architecture

SAIF.Services.Appworx is a small, single-purpose class library that wraps submission of batch jobs to the Appworx scheduling system via a single Oracle stored procedure, exposed through the SAIF BOF data portal.

Responsibilities

  • Assemble and submit an Appworx batch-job request (module name, requestor, printer, up to 20 string arguments) to the submit_appworx_job stored procedure via the SAIF BOF data portal.
  • Provide both an instance API (construct, set properties, call SubmitBatchJob()) and a shared/static convenience overload that performs construction, argument assignment, and submission in a single call.
  • Normalize submission failures into a single ApplicationException type so callers see a uniform failure mode regardless of the underlying data-access error.
  • Optionally override the target Oracle environment for Appworx submissions in non-production environments via the inUseWCISDEV1AppworxForAllDevEnv flag on the shared overload.

Component boundaries

  • clsRequestAppworxJob (sole public type): owns the entire responsibility of this library — request-shape assembly and stored-procedure submission. It contains no business-rule engine, no Criteria inner class, and does not implement the IBusinessCriteria pattern used elsewhere in the SAIF BOF framework; it is a direct data-portal caller rather than a full BOF business object*.
  • SAIF BOF Framework boundary: the library depends on IDataPortalInfo / IPortalRequest / IDataRequest (data portal abstraction), clsMSOracleDataLayer (Oracle data-layer construction), and AppGlobal.EnvironmentService (environment lookup) — all supplied by the referenced SAIF.BOF.Framework package family. The internal implementation of the data portal and its Oracle connectivity is outside this library's boundary and was not traced here**.
  • Database boundary: the library's only interaction with persistent state is a single outbound stored-procedure call (submit_appworx_job); it owns no tables and performs no direct SQL.
  • Consumer boundary: SAIF.Application.Claim.Legal\LegalNet\ (clsRequestManager.vb, clsMailDateManager.vb, clsCreateFileManager.vb) calls the shared SubmitBatchJob overload to submit the LGN0002_LEGALNET_LETTERS Appworx job for LegalNet letter-request, mailed-date-update, and create-file workflows. SAIF.Business.Claim.Legal declares a project reference but no direct source-level usage was confirmed within scanned scope**.

Interaction model

  • Instance model: a caller constructs clsRequestAppworxJob with an IDataPortalInfo, sets ModuleName/Requestor/Printer/Arg1–Arg20, then calls SubmitBatchJob(), which builds an IPortalRequest/IDataRequest pair and invokes DPI.ProcessPortalRequest(...).
  • Shared/static convenience model: clsRequestAppworxJob.SubmitBatchJob(inDPI, inModule, ...) wraps construction, argument assignment, and submission in one call; this is the pattern used by all observed callers.
  • Environment override: when the shared overload's inUseWCISDEV1AppworxForAllDevEnv flag is True, the library bypasses the caller-supplied IDataPortalInfo and derives a new one from a fixed clsMSOracleDataLayer("PRADT", target), where target is WCISPROD in Prod and WCISDEV1 otherwise (per BR-APX-003).
  • All submission failures are caught and rethrown as ApplicationException (per BR-APX-002), presenting a uniform failure contract to callers.

Design constraints

  • No <ProjectReference> elements exist in the .vbproj; all SAIF framework dependencies are consumed as prebuilt NuGet packages rather than in-repo project references.
  • The library targets .NET Framework 4.6.2 and depends on Oracle connectivity (Oracle.ManagedDataAccess) registered via App.config/Web.config DbProviderFactories entries.
  • Argument capacity is fixed at 20 positional string arguments (Arg1–Arg20); there is no mechanism for additional or named arguments.
  • The library performs no validation of ModuleName, Requestor, or Printer values beyond passing them as fixed-length stored-procedure parameters (30/32/30 characters respectively).
  • The submit_appworx_job stored procedure body resides in the Oracle database and was not accessible for inline inspection; its internal table interactions are opaque to source-level analysis**.

Architecture diagram

The following diagram shows the request submission flow from caller through the environment-override decision to the Appworx stored procedure.

flowchart TD
    A["Caller (e.g. LegalNet manager class)"] --> B["clsRequestAppworxJob.SubmitBatchJob (Shared overload)"]
    B --> C{"inUseWCISDEV1AppworxForAllDevEnv = True?"}
    C -->|Yes, Prod env| D["clsMSOracleDataLayer(PRADT, WCISPROD)"]
    C -->|Yes, non-Prod env| E["clsMSOracleDataLayer(PRADT, WCISDEV1)"]
    C -->|No| F["Use caller-supplied IDataPortalInfo"]
    D --> G["New clsRequestAppworxJob(DPI)"]
    E --> G
    F --> G
    G --> H["Set ModuleName, Requestor, Printer, Arg1..Arg20"]
    H --> I["SubmitBatchJob() instance method"]
    I --> J["IDataPortalInfo.ProcessPortalRequest"]
    J --> K["Stored procedure: submit_appworx_job (Oracle)"]

Sequence diagram

The following diagram shows the primary request/response sequence for the shared convenience overload used by all observed callers.

sequenceDiagram
    participant Caller
    participant AppworxJob as clsRequestAppworxJob
    participant DPI as IDataPortalInfo
    participant Oracle as Oracle (submit_appworx_job)
    Caller->>AppworxJob: SubmitBatchJob(inDPI, inModule, inRequestor, inPrinter, args...)
    AppworxJob->>AppworxJob: InitArgs()
    AppworxJob->>AppworxJob: Assign ModuleName, Requestor, Printer, Arg1..Arg20
    AppworxJob->>DPI: ProcessPortalRequest(PortalRequest)
    DPI->>Oracle: Execute submit_appworx_job(inModule, inRequestor, inPrinter, [inArg1..inArg20])
    Oracle-->>DPI: Result / exception
    DPI-->>AppworxJob: Result / exception
    AppworxJob-->>Caller: Return, or ApplicationException on failure

Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with ** could not be confirmed; treat as unknown until verified.

Sources

  • SAIF.Services.Appworx\clsRequestAppworxJob.vb
  • SAIF.Services.Appworx\SAIF.Services.Appworx.vbproj
  • SAIF.Services.Appworx\App.config
  • SAIF.Services.Appworx\Web.config
  • SAIF.Services.Appworx\packages.config