&ANALYZE-SUSPEND _VERSION-NUMBER AB_v9r12
/* Procedure Description
"Data Logic Procedure Template
 
Use this template to create  a Data Logic Procedure."
*/
&ANALYZE-RESUME
{adecomm/appserv.i}
DEFINE VARIABLE h_Astra                    AS HANDLE          NO-UNDO.
DEFINE VARIABLE h_Astra2                   AS HANDLE          NO-UNDO.
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _XFTR "Check Version Notes Wizard" DataLogicProcedure _INLINE
/* Actions: af/cod/aftemwizcw.w ? ? ? ? */
/* MIP Update Version Notes Wizard
Check object version notes.
af/cod/aftemwizpw.w
*/
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _XFTR "Update-Object-Version" DataLogicProcedure _INLINE
/* Actions: ? ? ? ? af/sup/afverxftrp.p */
/* This has to go above the definitions sections, as that is what it modifies.
   If its not, then the definitions section will have been saved before the
   XFTR code kicks in and changes it */
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _XFTR "Definition Comments Wizard" DataLogicProcedure _INLINE
/* Actions: ? af/cod/aftemwizcw.w ? ? ? */
/* Program Definition Comment Block Wizard
Welcome to the Program Definition Comment Block Wizard. Press Next to proceed.
af/cod/aftemwizpw.w
*/
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS DataLogicProcedure 
/*********************************************************************
* Copyright (C) 2000 by Progress Software Corporation ("PSC"),       *
* 14 Oak Park, Bedford, MA 01730, and other contributors as listed   *
* below.  All Rights Reserved.                                       *
*                                                                    *
* The Initial Developer of the Original Code is PSC.  The Original   *
* Code is Progress IDE code released to open source December 1, 2000.*
*                                                                    *
* The contents of this file are subject to the Possenet Public       *
* License Version 1.0 (the "License"); you may not use this file     *
* except in compliance with the License.  A copy of the License is   *
* available as of the date of this notice at                         *
* http://www.possenet.org/license.html                               *
*                                                                    *
* Software distributed under the License is distributed on an "AS IS"*
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. You*
* should refer to the License for the specific language governing    *
* rights and limitations under the License.                          *
*                                                                    *
* Contributors:                                                      *
*                                                                    *
*********************************************************************/
/*---------------------------------------------------------------------------------
  File: gsmsslogcp.p
 
  Description:  gsm_security_structure Data Logic Procedure Library Template
 
  Purpose:      A procedure library (PLIP) to support the maintenance of the gsm_security_structure table
                The following internal procedures may be added or modified
                to act as validation to creation, modification, or deletion of
                records in the database table
 
                Client-side:
                rowObjectValidate***
 
                Server-side upon create:
                createPreTransValidate***
                createBeginTransValidate
                createEndTransValidate
                createPostTransValidate
 
                Server-side upon write (create and modify):
                writePreTransValidate***
                writeBeginTransValidate
                writeEndTransValidate
                writePostTransValidate
 
                Server-side upon delete:
                deletePreTransValidate
                deleteBeginTransValidate
                deleteEndTransValidate
                deletePostTransValidate
 
                *** The rowObjectValidate, createPreTransValidate and writePreTransValidate
                internal procedures are automatically generated by the SDO generator
 
  Parameters:
 
  History:
  --------
  (v:010000)    Task:   101000047   UserRef:    
                Date:   09/28/2001  Author:     Johan Meyer
 
  Update Notes: Added function isFieldBlank to template of SDO Logic Procedure
 
  (v:010001)    Task:    90000119   UserRef:    posse
                Date:   06/05/2001  Author:     Haavard Danielsen
 
  Update Notes: Point to src/adm2/logic.i
 
---------------------------------------------------------------------------------*/
/*                   This .W file was created with the Progress UIB.             */
/*-------------------------------------------------------------------------------*/
 
/* ***************************  Definitions  ************************** */
/* MIP-GET-OBJECT-VERSION pre-processors
   The following pre-processors are maintained automatically when the object is
   saved. They pull the object and version from Roundtable if possible so that it
   can be displayed in the about window of the container */
 
&scop object-name       gsmsslogcp.p
DEFINE VARIABLE lv_this_object_name AS CHARACTER INITIAL "{&object-name}":U NO-UNDO.
&scop object-version    000000
 
/* object identifying preprocessor */
&glob   AstraPlip    yes
 
DEFINE VARIABLE cObjectName         AS CHARACTER NO-UNDO.
 
ASSIGN cObjectName = "{&object-name}":U.
 
&scop   mip-notify-user-on-plip-close   NO
 
 
/* Data Preprocessor Definitions */
&GLOB DATA-LOGIC-TABLE gsm_security_structure
&GLOB DATA-FIELD-DEFS  "af/obj2/gsmssful2o.i"
 
/* Error handling definitions */
{checkerr.i &define-only = YES}
 
DEFINE VARIABLE gcOEM                                   AS CHARACTER                NO-UNDO.
DEFINE VARIABLE hHandle AS HANDLE     NO-UNDO.

DEFINE VARIABLE gdProductModuleObj AS DECIMAL    NO-UNDO.
DEFINE VARIABLE gdObjectObj        AS DECIMAL    NO-UNDO.
DEFINE VARIABLE gdAttributeObj     AS DECIMAL    NO-UNDO.
DEFINE VARIABLE gdOwningObj        AS DECIMAL    NO-UNDO.
DEFINE VARIABLE gdRowNum           AS INTEGER    NO-UNDO.
DEFINE VARIABLE gcEntity           AS CHARACTER  NO-UNDO.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME


&ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK 

/* ********************  Preprocessor Definitions  ******************** */

&Scoped-define PROCEDURE-TYPE DataLogicProcedure
&Scoped-define DB-AWARE yes


/* Db-Required definitions. */
&IF DEFINED(DB-REQUIRED) = 0 &THEN
    &GLOBAL-DEFINE DB-REQUIRED TRUE
&ENDIF
&GLOBAL-DEFINE DB-REQUIRED-START   &IF {&DB-REQUIRED} &THEN
&GLOBAL-DEFINE DB-REQUIRED-END     &ENDIF





/* _UIB-PREPROCESSOR-BLOCK-END */
&ANALYZE-RESUME


/* ************************  Function Prototypes ********************** */

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD calculatecInstanceAttribute DataLogicProcedure 
FUNCTION calculatecInstanceAttribute RETURNS CHARACTER
  ( /* parameter-definitions */ )  FORWARD.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD calculatecProductModule DataLogicProcedure 
FUNCTION calculatecProductModule RETURNS CHARACTER
  ( /* parameter-definitions */ )  FORWARD.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD calculatecSmartObject DataLogicProcedure 
FUNCTION calculatecSmartObject RETURNS CHARACTER
  ( /* parameter-definitions */ )  FORWARD.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD isFieldBlank DataLogicProcedure 
FUNCTION isFieldBlank RETURNS LOGICAL
  ( INPUT pcFieldValue AS CHARACTER )  FORWARD.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME


/* *********************** Procedure Settings ************************ */

&ANALYZE-SUSPEND _PROCEDURE-SETTINGS
/* Settings for THIS-PROCEDURE
   Type: DataLogicProcedure
   Allow: 
   Frames: 0
   Add Fields to: Neither
   Other Settings: CODE-ONLY COMPILE APPSERVER DB-AWARE
 */
&ANALYZE-RESUME _END-PROCEDURE-SETTINGS

/* *************************  Create Window  ************************** */

&ANALYZE-SUSPEND _CREATE-WINDOW
/* DESIGN Window definition (used by the UIB) 
  CREATE WINDOW DataLogicProcedure ASSIGN
         HEIGHT             = 12.48
         WIDTH              = 55.6.
/* END WINDOW DEFINITION */
                                                                        */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _INCLUDED-LIB DataLogicProcedure 
/* ************************* Included-Libraries *********************** */
 
{src/adm2/logic.i}

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME


 


&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK DataLogicProcedure 


/* ***************************  Main Block  ******************************* */
 
{ry/app/ryplipmain.i}

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME


/* **********************  Internal Procedures  *********************** */

{&DB-REQUIRED-START}

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE beginTransactionValidate DataLogicProcedure  _DB-REQUIRED
PROCEDURE beginTransactionValidate :
/*------------------------------------------------------------------------------
  Purpose:     Super Override
  Parameters:  
  Notes:       
------------------------------------------------------------------------------*/

  /* Due to an issue in 9.1D, this code needed to be introduced to store index values, *
   * and then assign them in endTransactionValidate.                                   */

  FIND RowObjUpd WHERE RowObjUpd.RowMod = "A":U NO-ERROR.

  IF NOT AVAILABLE rowObjUpd THEN
      FIND RowObjUpd WHERE RowObjUpd.RowMod = "C":U NO-ERROR.

  IF AVAILABLE rowObjUpd THEN
      ASSIGN gdOwningObj                      = rowObjUpd.owning_obj
             gdProductModuleObj               = rowObjUpd.product_module_obj
             gdObjectObj                      = rowObjUpd.object_obj
             gdAttributeObj                   = rowObjUpd.instance_attribute_obj             
             
             rowObjUpd.owning_obj             = ?
             rowObjUpd.product_module_obj     = ?
             rowObjUpd.object_obj             = ?
             rowObjUpd.instance_attribute_obj = ?

             gdRowNum                         = rowObjUpd.rowNum.
  ELSE
      ASSIGN gdProductModuleObj = 0
             gdObjectObj        = 0
             gdAttributeObj     = 0
             gdRowNum           = 0.

  /* Code placed here will execute PRIOR to standard behavior. */

  RUN SUPER.

  /* Code placed here will execute AFTER standard behavior.    */

END PROCEDURE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

{&DB-REQUIRED-END}

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE createPreTransValidate DataLogicProcedure 
PROCEDURE createPreTransValidate PRIVATE :
/*------------------------------------------------------------------------------
  Purpose:     Procedure used to validate records server-side before the transaction scope upon create
  Parameters:  <none>
  Notes:       
------------------------------------------------------------------------------*/
 
  DEFINE VARIABLE cMessageList    AS CHARACTER    NO-UNDO.
  DEFINE VARIABLE cValueList      AS CHARACTER    NO-UNDO.
 
 
  ASSIGN
    ERROR-STATUS:ERROR = NO.
  RETURN cMessageList.
 
END PROCEDURE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

{&DB-REQUIRED-START}

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE endTransactionValidate DataLogicProcedure  _DB-REQUIRED
PROCEDURE endTransactionValidate :
/*------------------------------------------------------------------------------
  Purpose:     Super Override
  Parameters:  
  Notes:       
------------------------------------------------------------------------------*/

  RUN SUPER.

  /* Due to a known bug in the way unique indexes are assigned, we need to resort to the workaround below */

  FIND RowObjUpd WHERE rowObjUpd.rowNum = gdRowNum NO-ERROR.
  FIND b_gsm_security_structure WHERE b_gsm_security_structure.rowNum = gdRowNum NO-ERROR.

  IF  AVAILABLE rowObjUpd 
  AND AVAILABLE b_gsm_security_structure 
  THEN DO:
      FIND gsm_Security_structure EXCLUSIVE-LOCK
           WHERE ROWID(gsm_Security_structure) = TO-ROWID(ENTRY(1, rowObjUpd.rowIdent))
           NO-ERROR.
  
      IF AVAILABLE gsm_security_structure THEN
          ASSIGN gsm_security_structure.owning_obj             = gdOwningObj
                 gsm_security_structure.product_module_obj     = gdProductModuleObj
                 gsm_security_structure.object_obj             = gdObjectObj
                 gsm_security_structure.instance_attribute_obj = gdAttributeObj
    
                 rowObjUpd.owning_obj                          = gdOwningObj
                 rowObjUpd.product_module_obj                  = gdProductModuleObj
                 rowObjUpd.object_obj                          = gdObjectObj       
                 rowObjUpd.instance_attribute_obj              = gdAttributeObj
    
                 b_gsm_security_structure.owning_obj                          = gdOwningObj
                 b_gsm_security_structure.product_module_obj                  = gdProductModuleObj
                 b_gsm_security_structure.object_obj                          = gdObjectObj       
                 b_gsm_security_structure.instance_attribute_obj              = gdAttributeObj.
  END.

  ASSIGN ERROR-STATUS:ERROR = NO.

END PROCEDURE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

{&DB-REQUIRED-END}

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE initializeObject DataLogicProcedure 
PROCEDURE initializeObject :
/*------------------------------------------------------------------------------
  Purpose:     Super Override
  Parameters:  
  Notes:       gsm_security_structure records can be defined for gsm_field,
               gsm_token, and gsn_range records.  The foreign fields and where
               clause need to be set appropriately based on the what we are 
               defining gsm_security_structure records for (DataSource).
------------------------------------------------------------------------------*/
DEFINE VARIABLE hDataSource    AS HANDLE       NO-UNDO.
DEFINE VARIABLE cForeignFields AS CHARACTER    NO-UNDO.
DEFINE VARIABLE cObjField      AS CHARACTER    NO-UNDO.
DEFINE VARIABLE cValueList     AS CHARACTER    NO-UNDO.
DEFINE VARIABLE cWhere         AS CHARACTER    NO-UNDO.

  {get DataSource hDataSource}.

  IF VALID-HANDLE(hDataSource) THEN 
  DO:

    /* Get Table FLA and name of the primary key for the Data Source table */
    ASSIGN cValueList = DYNAMIC-FUNCTION('getTableInfo':U IN hDataSource).

    IF LENGTH(TRIM(cValueList)) > 0 THEN
    DO:
      ASSIGN gcOEM            = ENTRY(1, cValueList, CHR(3))
             cObjField        = ENTRY(2, cValueList, CHR(3))
             cForeignFields   = "gsm_security_structure.owning_obj,":U + cObjField
             cWhere           = "gsm_security_structure.owning_entity_mnemonic = '":U
                                 + gcOEM + "'":U.
      {set ForeignFields cForeignFields}.
    END.    /* there is data */

    IF cWhere <> "":U THEN
    DO:
      DYNAMIC-FUNCTION("addQueryWhere":U, INPUT cWhere, ?, "AND":U).
      {set manualAddQueryWhere cWhere}.
    END.    /* new WHERE clause is only included when there are valid attributes */

  END.  /* if valid hDataSource */

  RUN SUPER.

END PROCEDURE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE killPlip DataLogicProcedure 
PROCEDURE killPlip :
/*------------------------------------------------------------------------------
  Purpose:     entry point to instantly kill the plip if it should get lost in memory
  Parameters:  <none>
  Notes:       
------------------------------------------------------------------------------*/
 
  {ry/app/ryplipkill.i}
 
END PROCEDURE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE objectDescription DataLogicProcedure 
PROCEDURE objectDescription :
/*------------------------------------------------------------------------------
  Purpose:     Pass out a description of the PLIP, used in Plip temp-table
  Parameters:  <none>
  Notes:       This should be changed manually for each plip
------------------------------------------------------------------------------*/
 
  DEFINE OUTPUT PARAMETER cDescription AS CHARACTER NO-UNDO.
 
  ASSIGN cDescription = "Template PLIP".
 
END PROCEDURE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE plipSetup DataLogicProcedure 
PROCEDURE plipSetup :
/*------------------------------------------------------------------------------
  Purpose:    Run by main-block of PLIP at startup of PLIP
  Parameters: <none>
  Notes:       
------------------------------------------------------------------------------*/
 
  {ry/app/ryplipsetu.i}  
 
END PROCEDURE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE plipShutdown DataLogicProcedure 
PROCEDURE plipShutdown :
/*------------------------------------------------------------------------------
  Purpose:     This procedure will be run just before the calling program 
               terminates
  Parameters:  <none>
  Notes:       
------------------------------------------------------------------------------*/
 
  {ry/app/ryplipshut.i}
 
END PROCEDURE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

{&DB-REQUIRED-START}

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE preTransactionValidate DataLogicProcedure  _DB-REQUIRED
PROCEDURE preTransactionValidate :
/*------------------------------------------------------------------------------
  Purpose:     Procedure used to validate RowObjUpd records server-side
  Parameters:  <none>
  Notes:       
------------------------------------------------------------------------------*/

DEFINE VARIABLE cMessageList    AS CHARACTER    NO-UNDO.
DEFINE VARIABLE cValueList      AS CHARACTER    NO-UNDO.

  FOR EACH RowObjUpd WHERE CAN-DO('A,C,U':U,RowObjUpd.RowMod):

      IF RowObjUpd.product_module_obj     = ? THEN RowObjUpd.product_module_obj = 0.
      IF RowObjUpd.object_obj             = ? THEN RowObjUpd.object_obj = 0.
      IF RowObjUpd.instance_attribute_obj = ? THEN RowObjUpd.instance_attribute_obj = 0. 

      IF (RowObjUpd.RowMod = 'U':U AND
        CAN-FIND(FIRST gsm_security_structure
          WHERE gsm_security_structure.owning_entity_mnemonic = rowObjUpd.owning_entity_mnemonic
            AND gsm_security_structure.owning_obj = rowObjUpd.owning_obj
            AND gsm_security_structure.product_module_obj = rowObjUpd.product_module_obj
            AND gsm_security_structure.object_obj = rowObjUpd.object_obj
            AND gsm_security_structure.instance_attribute_obj = rowObjUpd.instance_attribute_obj
            AND ROWID(gsm_security_structure) <> TO-ROWID(ENTRY(1,RowObjUpd.RowIDent))))
      OR (RowObjUpd.RowMod <> 'U':U AND
        CAN-FIND(FIRST gsm_security_structure
          WHERE gsm_security_structure.owning_entity_mnemonic = rowObjUpd.owning_entity_mnemonic
            AND gsm_security_structure.owning_obj = rowObjUpd.owning_obj
            AND gsm_security_structure.product_module_obj = rowObjUpd.product_module_obj
            AND gsm_security_structure.object_obj = rowObjUpd.object_obj
            AND gsm_security_structure.instance_attribute_obj = rowObjUpd.instance_attribute_obj)) THEN
          ASSIGN cValueList   = STRING(RowObjUpd.owning_entity_mnemonic) + ', ' + STRING(RowObjUpd.owning_obj) + ', ' + STRING(RowObjUpd.product_module_obj) + ', ' + STRING(RowObjUpd.object_obj) + ', ' + STRING(RowObjUpd.instance_attribute_obj)
                 cMessageList = cMessageList + (IF NUM-ENTRIES(cMessageList,CHR(3)) > 0 THEN CHR(3) ELSE '':U) + 
                                {af/sup2/aferrortxt.i 'AF' '8' 'gsm_security_structure' '' "'owning_entity_mnemonic, owning_obj, product_module_obj, object_obj, instance_attribute_obj, '" cValueList }.
  END.

  ERROR-STATUS:ERROR = NO.
  RETURN cMessageList.
END PROCEDURE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

{&DB-REQUIRED-END}

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE rowObjectValidate DataLogicProcedure 
PROCEDURE rowObjectValidate :
/*------------------------------------------------------------------------------
  Purpose:     Procedure used to validate b_gsm_security_structure record client-side
  Parameters:  <none>
  Notes:       
------------------------------------------------------------------------------*/

  DEFINE VARIABLE cMessageList    AS CHARACTER    NO-UNDO.
  DEFINE VARIABLE cValueList      AS CHARACTER    NO-UNDO.

  IF LENGTH(b_gsm_security_structure.owning_entity_mnemonic) = 0 OR LENGTH(b_gsm_security_structure.owning_entity_mnemonic) = ? AND gcOEM <> '':U THEN
    ASSIGN b_gsm_security_structure.owning_entity_mnemonic = gcOEM.

  ERROR-STATUS:ERROR = NO.
  RETURN cMessageList.
END PROCEDURE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

{&DB-REQUIRED-START}

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE writePreTransValidate DataLogicProcedure  _DB-REQUIRED
PROCEDURE writePreTransValidate :
/*------------------------------------------------------------------------------
  Purpose:     Procedure used to validate records server-side before the transaction scope upon write
  Parameters:  <none>
  Notes:       
------------------------------------------------------------------------------*/
 
  DEFINE VARIABLE cMessageList    AS CHARACTER    NO-UNDO.
  DEFINE VARIABLE cValueList      AS CHARACTER    NO-UNDO.
 
 
  ASSIGN
    ERROR-STATUS:ERROR = NO.
  RETURN cMessageList.
 
END PROCEDURE.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

{&DB-REQUIRED-END}

/* ************************  Function Implementations ***************** */

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION calculatecInstanceAttribute DataLogicProcedure 
FUNCTION calculatecInstanceAttribute RETURNS CHARACTER
  ( /* parameter-definitions */ ) :
/*------------------------------------------------------------------------------
  Purpose:  
    Notes:  
------------------------------------------------------------------------------*/
  DEFINE VARIABLE hRowObject  AS HANDLE NO-UNDO.
  DEFINE VARIABLE hAttribObj  AS HANDLE NO-UNDO.
  DEFINE VARIABLE hAttribCode AS HANDLE     NO-UNDO.

  hRowObject  = DYNAMIC-FUNCTION('getRowObject':U IN TARGET-PROCEDURE).
  hAttribObj = hRowObject:BUFFER-FIELD('instance_attribute_obj':U).
  hAttribCode = hRowObject:BUFFER-FIELD('attribute_code':U).

  IF NOT VALID-HANDLE(hAttribCode) OR
     NOT VALID-HANDLE(hAttribObj) OR
    (VALID-HANDLE(hAttribObj) AND 
     hAttribObj:BUFFER-VALUE = 0) THEN
    RETURN "ALL":U.

  ELSE
    RETURN hAttribCode:BUFFER-VALUE.

END FUNCTION.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION calculatecProductModule DataLogicProcedure 
FUNCTION calculatecProductModule RETURNS CHARACTER
  ( /* parameter-definitions */ ) :
/*------------------------------------------------------------------------------
  Purpose:  
    Notes:  
------------------------------------------------------------------------------*/
  DEFINE VARIABLE hRowObject  AS HANDLE NO-UNDO.
  DEFINE VARIABLE hProdModObj AS HANDLE NO-UNDO.
  DEFINE VARIABLE hProdModCod AS HANDLE     NO-UNDO.

  hRowObject  = DYNAMIC-FUNCTION('getRowObject':U IN TARGET-PROCEDURE).
  hProdModObj = hRowObject:BUFFER-FIELD('product_module_obj':U).
  hProdModCod = hRowObject:BUFFER-FIELD('product_module_code':U).

  IF NOT VALID-HANDLE(hProdModCod) OR
     NOT VALID-HANDLE(hProdModObj) OR
    (VALID-HANDLE(hProdModObj) AND 
     hProdModObj:BUFFER-VALUE = 0) THEN
    RETURN "ALL":U.

  ELSE
    RETURN hProdModCod:BUFFER-VALUE.

END FUNCTION.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION calculatecSmartObject DataLogicProcedure 
FUNCTION calculatecSmartObject RETURNS CHARACTER
  ( /* parameter-definitions */ ) :
/*------------------------------------------------------------------------------
  Purpose:  
    Notes:  
------------------------------------------------------------------------------*/
  DEFINE VARIABLE hRowObject  AS HANDLE NO-UNDO.
  DEFINE VARIABLE hObjectObj  AS HANDLE NO-UNDO.
  DEFINE VARIABLE hFileName   AS HANDLE     NO-UNDO.

  hRowObject  = DYNAMIC-FUNCTION('getRowObject':U IN TARGET-PROCEDURE).
  hObjectObj = hRowObject:BUFFER-FIELD('object_obj':U).
  hFileName = hRowObject:BUFFER-FIELD('object_filename':U).

  IF NOT VALID-HANDLE(hFileName) OR
     NOT VALID-HANDLE(hObjectObj) OR
    (VALID-HANDLE(hObjectObj) AND 
     hObjectObj:BUFFER-VALUE = 0) THEN
    RETURN "ALL":U.

  ELSE
    RETURN hFileName:BUFFER-VALUE.

END FUNCTION.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

&ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION isFieldBlank DataLogicProcedure 
FUNCTION isFieldBlank RETURNS LOGICAL
  ( INPUT pcFieldValue AS CHARACTER ) :
/*------------------------------------------------------------------------------
  Purpose:  Checks whether a character field is blank
    Notes:  
------------------------------------------------------------------------------*/
 
  IF LENGTH(TRIM(pcFieldValue)) = 0 OR LENGTH(TRIM(pcFieldValue)) = ? THEN
    RETURN TRUE.
  ELSE
    RETURN FALSE.   /* Function return value. */
 
END FUNCTION.

/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

