Is there a way to get the process model ID from its UUID?...

Is there a way to get the process model ID from its UUID?...

OriginalPostID-127577

OriginalPostID-127577

  Discussion posts and replies are publicly visible

Parents
  • 0
    Certified Senior Developer
    In my particular use case, we cannot use constants of type process model, because the process models referred to in the constant won't exist on every environment, so the import would fail.

    Some background:
    We have a single development environment, but two production environments - one that is internal to our network, and one that is exposed externally. Each is used for multiple Appian applications, and will host apps based on whether they need to be internal or external. I am setting up an LDAP Sync application that will live on BOTH servers, but many of our apps will need to do some additional processing on their users after the sync completes, so I want to call several process models dynamically using the "Start Process Model" smart service.

    If it were possible to mark non-primitive constants as "environmental" constants, this would work. Since they can't be, I need to use IDs and make those environmental constants - but IDs don't exist before the first import. It would be much cleaner to store the UUIDs and instead make an environmental constant that specifies which set of UUIDs to use - if there were a clean way to get the ID from the UUID, or a way to run the process from the UUID instead.
  • 0
    Certified Lead Developer
    in reply to Jason Ruvinsky
    In that case then, I think you just need to use the process model details by uuid plugin function to get the pmid at call time - would this work within the configuration of the start process node?
  • 0
    Certified Senior Developer
    in reply to Mike Schmitt
    Mike, using the Process Model Details by UUID plugin function would work, but since the data is returned in a formatted string, rather than in a dictionary, I'd need to extract the ID from it using string parsing. This seems like a really round-about and potentially error prone method of obtaining the ID. I could look into writing a simple plugin that gets it, if one doesn't already exist.

    Also, I tested the Start Process Node with an integer ID, and that does work for calling the matching process with that ID.
  • 0
    Certified Lead Developer
    in reply to Jason Ruvinsky

    I agree with your critique regarding the data returned by the plugin expression, and for that reason I've already written an expression rule in the past that does the needed parsing and passes back a dictionary. I can post it tomorrow if you need, as I'm travelling today.

    Edit: I'm back today, so here's the expression rule I mentioned in case anyone would like to use it.

    =/*  GLBL_processModelDetailsByUUID  */
    
    with(
      local!rawText: if(
        rule!APN_isBlank(ri!uuid),
        " ",
        getprocessmodeldetailsbyuuid(ri!uuid)
      ),
    
      local!type: extract(local!rawText, "Type:", "," ),
      local!nameList: trim( split( extract( rawText, "Name: [", "]" ), "," )),
      local!nameArray: apply( rule!GLBL_returnLanguageNamePair, local!nameList ),
      local!id: extract( local!rawText, "Id:", ", UUID" ),
      local!uuid: extract( local!rawText, "UUID:", ", Creator" ),
      local!creator: extract( local!rawText, "Creator: ", ", Last" ),
      local!lastModifiedBy: extract( local!rawText, "Last Modified by: ", ", Parent"),
      local!parent: extract( local!rawText, "Parent: ", ", Parent Id:" ),
      local!parentId: tointeger( extract( local!rawText, "Parent Id: ", "," )),
      local!location: extract( local!rawText, "Location: ", ", Is" ),
      local!isPublic: extract( local!rawText, "IsPublic: ", ", Created" ) = "true",
      
      /* note: for the latest versions of the content details by uuid plugin, 
        the following lines can have the expression rule call replaced with 
        a simple "todatetime()" function, as the plugin was upgraded to 
        return a more standard datetime string after this handler rule was
        originally written. */
      local!createdOn: rule!GLBL_dateTimeStringToDatetime(extract( local!rawText, "Created on: ", ", Last" )),
      local!lastModifiedOn: rule!GLBL_dateTimeStringToDatetime(extract( local!rawText & "END", "Last Modified on: ", "END" )),
      
      {
        type: local!type,
        primaryName: property(index(local!nameArray, 1, ""), "name", ""),
        nameArray: local!nameArray,
        id: local!id,
        uuid: local!uuid,
        creator: local!creator,
        lastModifiedBy: local!lastModifiedBy,
        parent: local!parent,
        parentId: local!parentId,
        location: local!location,
        isPublic: local!isPublic,
        createdOn: local!createdOn,
        lastModifiedOn: local!lastModifiedOn
      }
    )
    
    /* developed by: Mike Schmitt */

Reply
  • 0
    Certified Lead Developer
    in reply to Jason Ruvinsky

    I agree with your critique regarding the data returned by the plugin expression, and for that reason I've already written an expression rule in the past that does the needed parsing and passes back a dictionary. I can post it tomorrow if you need, as I'm travelling today.

    Edit: I'm back today, so here's the expression rule I mentioned in case anyone would like to use it.

    =/*  GLBL_processModelDetailsByUUID  */
    
    with(
      local!rawText: if(
        rule!APN_isBlank(ri!uuid),
        " ",
        getprocessmodeldetailsbyuuid(ri!uuid)
      ),
    
      local!type: extract(local!rawText, "Type:", "," ),
      local!nameList: trim( split( extract( rawText, "Name: [", "]" ), "," )),
      local!nameArray: apply( rule!GLBL_returnLanguageNamePair, local!nameList ),
      local!id: extract( local!rawText, "Id:", ", UUID" ),
      local!uuid: extract( local!rawText, "UUID:", ", Creator" ),
      local!creator: extract( local!rawText, "Creator: ", ", Last" ),
      local!lastModifiedBy: extract( local!rawText, "Last Modified by: ", ", Parent"),
      local!parent: extract( local!rawText, "Parent: ", ", Parent Id:" ),
      local!parentId: tointeger( extract( local!rawText, "Parent Id: ", "," )),
      local!location: extract( local!rawText, "Location: ", ", Is" ),
      local!isPublic: extract( local!rawText, "IsPublic: ", ", Created" ) = "true",
      
      /* note: for the latest versions of the content details by uuid plugin, 
        the following lines can have the expression rule call replaced with 
        a simple "todatetime()" function, as the plugin was upgraded to 
        return a more standard datetime string after this handler rule was
        originally written. */
      local!createdOn: rule!GLBL_dateTimeStringToDatetime(extract( local!rawText, "Created on: ", ", Last" )),
      local!lastModifiedOn: rule!GLBL_dateTimeStringToDatetime(extract( local!rawText & "END", "Last Modified on: ", "END" )),
      
      {
        type: local!type,
        primaryName: property(index(local!nameArray, 1, ""), "name", ""),
        nameArray: local!nameArray,
        id: local!id,
        uuid: local!uuid,
        creator: local!creator,
        lastModifiedBy: local!lastModifiedBy,
        parent: local!parent,
        parentId: local!parentId,
        location: local!location,
        isPublic: local!isPublic,
        createdOn: local!createdOn,
        lastModifiedOn: local!lastModifiedOn
      }
    )
    
    /* developed by: Mike Schmitt */

Children
No Data