DB

I have created an attribute called "serial Number" to contain a birth certificate for our  function objects and models derived from the GUID. 

For new objects and models this works fine - by running a macro.

(Models - on model creation)

(Objects - on model close) - always check and update function objects



The User defined attribute being populated is set to read-only.

Upon running a script to backfill all existing models and objects - the models update fine. The problem is the objects don't! The resulting message tells me that it cannot update object attributes set to read-only. Que?



So it's one rule for models, another entirely for objects? Can anyone shed any light on this?

Is there a way of checking to see if the attribute is read-only, set to editable, then set back once updated?

Here's my script:

 

// global variables
  var nLoc = Context.getSelectedLanguage()
  
  
function main(){

  var oSelectedGroups = ArisData.getSelectedGroups()
  
  var db = ArisData.getActiveDatabase();
  var filter=db.ActiveFilter();  
  var udSerialNumber = filter.UserDefinedAttributeTypeNum("1a8f5810-6496-11e2-0c7e-005056950062");
 
     
  if(oSelectedGroups.length>0){
      
//        var dlgResult = Dialogs.MsgBox(getString("S_INC_SUBGGROUPS"), Constants.MSGBOX_ICON_QUESTION | Constants.MSGBOX_BTN_YESNO, getString("S_INC_SUBGGROUPS_HDR"));
        var bRecursive = true 
        //(dlgResult == Constants.MSGBOX_RESULT_YES);
        var oSelectedGroupCount = oSelectedGroups.length; 
        
//       for (var i = 0; i < oSelectedGroups.length; i++) {
//            oSelectedGroups = oSelectedGroups.concat(oSelectedGroups[i].Childs(bRecursive));
//        } 
  
  // models in group are > 1
    
    for(var c2=0;c2<oSelectedGroups.length;c2++) // loop through the models in the group performing the action
    {
           var oObj = oSelectedGroups[c2].ObjDefList(true, [Constants.OT_FUNC]);
           oOutCount = 0
           oOutput.OutputLn("------------------------------" , "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              
           oOutput.OutputLn(" " , "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              
           oOutput.OutputLn("Group Name:" + oSelectedGroups[c2].Name(nLoc), "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              
           oOutput.OutputLn("Group Path:" + oSelectedGroups[c2].Path(nLoc), "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              
           oOutput.OutputLn(" " , "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              
 
           if (oObj.length>0){
             for(var i2=0; i2<oObj.length; i2++){
                
                    var objName = oObj[i2].Name(nLoc);
                    var objType = oObj[i2].Type();                    

                        if (objType=='Function'){
                            
                            
                        var existSerialNumber = getAttributeValue(oObj[i2], udSerialNumber); // existing Identifier
                        var mod_guid = oObj[i2].GUID();
                        var NewID= stripGUID(mod_guid); // GUID
      
                           if (Left(mod_guid,18) != existSerialNumber || existSerialNumber == '') {
                                // update the attribute
                                //setAttributeValue(oSelectedModels[c2], udSerialNumber,NewID)
                                oObj[i2].Attribute(udSerialNumber,nLoc).setValue(NewID)
                                oOutput.OutputLn("Object: " + objName + " | Updated with Serial Number:" + NewID + "|", "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              
                                oOutCount++;
                                gOutCount++;
                           }                 
                                oOutFoundCount++;
                        }
                }
            }
        if (oOutCount==0){
           oOutput.OutputLn("------------------------------" , "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              
           oOutput.OutputLn("No Functions Objects to Update" , "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              
        } else {
           oOutput.OutputLn("------------------------------" , "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              
           oOutput.OutputLn("Objects Found:" + oOutFoundCount , "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              
           oOutput.OutputLn("Objects Updated:" + oOutCount , "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              
        }
        
      }
           oOutput.OutputLn("------------------------------" , "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              
           oOutput.OutputLn("Total Objects Updated:" + gOutCount , "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              
           oOutput.OutputLn("------------------------------" , "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 10);              

           oOutput.WriteReport(); 
 
  }
} // end main  

Any ideas anyone?

Featured achievement

Genius
You like to help others solve their problems by answering questions.
Recent Unlocks
  • KF
  • KH
  • RG
  • Profile picture for user Vee_ARIS
  • Profile picture for user smarty
  • PacMan

Leaderboard

|
icon-arrow-down icon-arrow-cerulean-left icon-arrow-cerulean-right icon-arrow-down icon-arrow-left icon-arrow-right icon-arrow icon-back icon-close icon-comments icon-correct-answer icon-tick icon-download icon-facebook icon-flag icon-google-plus icon-hamburger icon-in icon-info icon-instagram icon-login-true icon-login icon-mail-notification icon-mail icon-mortarboard icon-newsletter icon-notification icon-pinterest icon-plus icon-rss icon-search icon-share icon-shield icon-snapchat icon-star icon-tutorials icon-twitter icon-universities icon-videos icon-views icon-whatsapp icon-xing icon-youtube icon-jobs icon-heart icon-heart2 aris-express bpm-glossary help-intro help-design Process_Mining_Icon help-publishing help-administration help-dashboarding help-archive help-risk icon-knowledge icon-question icon-events icon-message icon-more icon-pencil forum-icon icon-lock