Use of "Table"-Class in Processes

Hi everyone,

I'm using One Identity Manager 8.1.3.

I find the class "Table" quite helpful and use it in various places to substitute e. g. "CCC_UID_Person" with Table.CCC_CustomTable.CCC_UID_Person or "CCC_CustomTable" with Table.CCC_CustomTable. I've noticed that the syntax does not work everywhere.

If used in a generating condition or WhereClause of a process, the following error occures when the process gets generated: 

ErrorMessages (2021-06-28 15:01:29.073) Error saving XYZ:

[810306] Error during execution of 'OnGenerate' in logic module 'VI.DB.Entities.EventsEntityLogic'.

[810103] Error generating processes for event Update.

[810222] Error executing script 'Event_Update'.

[810108] Error generation process step event UPDATE.

[System.MissingMethodException] Method not found: 'CCC_CustomTable VI.DB.Model.Table.get_CCC_CustomTable()'.

 

Has anyone else come across this error? Is this maybe a known limitation for custom tables?

  • I am unable to reproduce this with a custom table. Are you sure that the current assemblies are available on the Job Service? Did you try to clear the local cache to force the system to fetch the latest assemblies (including the ones for VI.DB.Model.Table)?

  • I cannot reproduce, too..

    But what I can say is, that "System.MissingMethodException" in general is thrown, when you e.g. compile with one version of an assembly and run the code later with another version of that assembly, where, well, the method is missing ;)

    In case of the model classes this might be the case, when the update process has a problem with the model assembly?! Perheps it helps already, if you recompile the models.

  • Hi,

    since I was under time pressure I wasn't able to analyse this issue any further, until I was recently reminded by a colleague who had the exact same problem in another project.

    Last year I just replaced the "Table.[...]" methods by plain strings to make it work. Yesterday I substituted it with "Table.[...]" again - it works without any problems now.

    It could have been a cache problem as you suggested. Let's see if the problem occurs again.

    If you don't mind, I'd like to as another question. Since the class VI.DB.Model.Table provides methods to retrieve table and column names only, are there methods to retrieve the names of scripts an processes too?

  • There are no simple methods to retrieve the names of scripts and processes. I would be interested to hear a use case for these.

  • Hi Markus, thanks for your reply.
    Think of the following common situation:

    If you call a script in a process for example. You would type e. g. "Scripts.CCC_" and use intellisense to find the script you're looking for. Otherwise you either need to know it's name (typos possible) or go to the script and copy paste its name. If you change the script's name later, your process will fail and someone has to take care of the frozen jobs. If one could use "Scripts.CCC_DoSomeThing" a rename would instantly cause a compiler error.

    The same goes for process names. You sometimes need to check if a certain process is running for example.

  • Maybe it's already outdated, but anyway:

    For scripts, you can use NameOf(Scritptname), e.g. NameOf(TSB_CreateDN)

    This will report an error on compiling if you misspell the scriptname.