This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Create Dynamic Role for ITShop from Script

Hi all,

I'm trying to create a dynamic role fro the visbility of an ITShop from script triggered when a certain event is called but the script return me the following error:

"Dynamic roles: Write permission denied for value "Dynamic role"

 

This is my script:

 

' create or find dynamic group
Dim dynamicGroup As ISingleDbObject
Dim uid_dynamicGroup As String = Connection.GetSingleProperty("dynamicGroup","uid_dynamicGroup","ObjectKeyBaseTree='<Key><T>ITShopOrg</T><P>"+uid_customers+"</P></Key>'")
dynamicGroup = Connection.CreateSingle("dynamicGroup")
If (uid_dynamicGroup.Equals("")) Then

'msgbox ("uid_customers " + uid_customers)
dynamicGroup.PutValue("ObjectKeyBaseTree","<Key><T>ITShopOrg</T><P>"+uid_customers+"</P></Key>")
dynamicGroup.PutValue("uid_dialogschedule",connection.GetSingleProperty("dialogschedule","uid_dialogschedule","name = 'Dynamic roles check'"))
dynamicGroup.PutValue("uid_dialogtableobjectclass",connection.GetSingleProperty("dialogtable","uid_dialogtable","tablename = 'Person'"))
dynamicGroup.PutValue("whereclause","isnull(IsInActive, 0) = 0") 'only active employes
'dynamicGroup.PutValue("whereclause","1=2")
dynamicGroup.Save
dynamicGroup.Load
uid_dynamicGroup = dynamicGroup.getValue("uid_dynamicGroup")
...
dynamicGroup.PutValue("uid_dynamicGroup",uid_dynamicGroup)
dynamicGroup.Load

dynamicGroup.PutValue("whereclause","isnull(IsInActive, 0) = 0") 'only active employes
dynamicGroup.Save
dynamicGroup.Load

There is any way to accomplish that?

This script running on 7.0 didn't return any error now on 7.1 yes.

 

Thanks Michele

Parents
  • Just prepped your code sample using the new object layer from version 7 as exercise.

    You may find is useful as well as it demonstrates

    • Use of the ObjectKey class
    • Use of SQL Formatter
    • Use of Query objects
    • Use of Unit of Works
    • Use of TryGet

     

    Public Sub CCC_CreateOrUpdate_DynamicGroup(uid_customers As String)
        ' create or find dynamic group
        Dim dynamicGroup As IEntity = Nothing
        Dim f As ISqlFormatter = Session.SqlFormatter
        ' Create an ObjectKey for the customer node
        Dim ObjectKeyBaseTree As DbObjectKey = New DbObjectKey("ITShopOrg", uid_customers)
     
        ' Try to load the dynamic group frm the database
        If Session.Source.TryGet(
                Query.From("DynamicGroup") _
                .Where(f.Comparison("ObjectKeyBaseTree", ObjectKeyBaseTree.ToXmlString(), ValType.String, CompareOperator.Equal, FormatterOptions.NonUnicodeLiterals)) _
                .SelectNonLobs, dynamicGroup
        ) Then
            ' A dynamic group exists for our customer node
            ' Just change the where clause
            dynamicGroup.PutValue("whereclause""isnull(IsInActive, 0) = 0"'only active employes
        Else
            ' There is no dynamic group for our customer node
            ' Create a new dynamic group
            dynamicGroup = Session.Source.CreateNew("DynamicGroup")
            ' Set the values
            dynamicGroup.PutValue("ObjectKeyBaseTree", ObjectKeyBaseTree.ToXmlString())
            ' Optimization: UID_DialogSchedule for ootb schedules never change since version 7
            dynamicGroup.PutValue("UID_DialogSchedule""QER-B78E7C59F09D487085506ED339F0257D")
            ' Optimization: UID_DialogTable for ootb tables never change since version 7
            dynamicGroup.PutValue("UID_DialogTableObjectClass""QER-T-Person")
            dynamicGroup.PutValue("whereclause""isnull(IsInActive, 0) = 0"'only active employes
        End If
        ' Saving the changed or created dynamic group
        Using uow As IUnitOfWork = Session.StartUnitOfWork()
            uow.Put(dynamicGroup)
            uow.Commit()
        End Using
    End Sub

     

    Markus

     

     

Reply
  • Just prepped your code sample using the new object layer from version 7 as exercise.

    You may find is useful as well as it demonstrates

    • Use of the ObjectKey class
    • Use of SQL Formatter
    • Use of Query objects
    • Use of Unit of Works
    • Use of TryGet

     

    Public Sub CCC_CreateOrUpdate_DynamicGroup(uid_customers As String)
        ' create or find dynamic group
        Dim dynamicGroup As IEntity = Nothing
        Dim f As ISqlFormatter = Session.SqlFormatter
        ' Create an ObjectKey for the customer node
        Dim ObjectKeyBaseTree As DbObjectKey = New DbObjectKey("ITShopOrg", uid_customers)
     
        ' Try to load the dynamic group frm the database
        If Session.Source.TryGet(
                Query.From("DynamicGroup") _
                .Where(f.Comparison("ObjectKeyBaseTree", ObjectKeyBaseTree.ToXmlString(), ValType.String, CompareOperator.Equal, FormatterOptions.NonUnicodeLiterals)) _
                .SelectNonLobs, dynamicGroup
        ) Then
            ' A dynamic group exists for our customer node
            ' Just change the where clause
            dynamicGroup.PutValue("whereclause""isnull(IsInActive, 0) = 0"'only active employes
        Else
            ' There is no dynamic group for our customer node
            ' Create a new dynamic group
            dynamicGroup = Session.Source.CreateNew("DynamicGroup")
            ' Set the values
            dynamicGroup.PutValue("ObjectKeyBaseTree", ObjectKeyBaseTree.ToXmlString())
            ' Optimization: UID_DialogSchedule for ootb schedules never change since version 7
            dynamicGroup.PutValue("UID_DialogSchedule""QER-B78E7C59F09D487085506ED339F0257D")
            ' Optimization: UID_DialogTable for ootb tables never change since version 7
            dynamicGroup.PutValue("UID_DialogTableObjectClass""QER-T-Person")
            dynamicGroup.PutValue("whereclause""isnull(IsInActive, 0) = 0"'only active employes
        End If
        ' Saving the changed or created dynamic group
        Using uow As IUnitOfWork = Session.StartUnitOfWork()
            uow.Put(dynamicGroup)
            uow.Commit()
        End Using
    End Sub

     

    Markus

     

     

Children
No Data