<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.catglobe.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nguyenduyan</id>
	<title>Catglobe Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.catglobe.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nguyenduyan"/>
	<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/Special:Contributions/Nguyenduyan"/>
	<updated>2026-05-07T15:39:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=AppProduct_class&amp;diff=241037</id>
		<title>AppProduct class</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=AppProduct_class&amp;diff=241037"/>
		<updated>2025-09-09T07:39:58Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CGscriptClass_Template&lt;br /&gt;
|Name=&amp;lt;nowiki&amp;gt;AppProduct&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Represents an AppProduct.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|InheritsFrom=object|Methods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=AppProductRole|Name=&amp;lt;nowiki&amp;gt;AddRole&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Add a new blank role&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Save&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Apply all changes to the AppProduct&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ToString&amp;lt;/nowiki&amp;gt;|Inherited=object|Description=&amp;lt;nowiki&amp;gt;The string representation of the object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Properties=&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;DevelopmentUrl&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set the development URL&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;Enabled&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set if the product is enabled&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;IsSales&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set if this is a sales product&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=LocalizedString|Name=&amp;lt;nowiki&amp;gt;Name&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set the localized name&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ObjectTypeName&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;The name of the type of object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;Order&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set the order&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=ResourceEdit|Name=&amp;lt;nowiki&amp;gt;ResourceModel&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Edit the Resource&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=CompatibilityArray|Name=&amp;lt;nowiki&amp;gt;Roles&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Get the list of roles&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;SvgIcon&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set the SVG icon content&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=&amp;lt;nowiki&amp;gt;TypeInformation&amp;lt;/nowiki&amp;gt;|HasGetter=1|Inherited=object|Description=&amp;lt;nowiki&amp;gt;Get information about this class.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;Url&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set the product URL&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|StaticMethods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=AppProduct|Name=&amp;lt;nowiki&amp;gt;AppProduct_create&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Create a new AppProduct&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=AppProduct|Name=&amp;lt;nowiki&amp;gt;AppProduct_getById&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;id&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Id of the item to fetch&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Fetch AppProduct by primary key. Returns Empty if not found&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=TenantMapping_class&amp;diff=241036</id>
		<title>TenantMapping class</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=TenantMapping_class&amp;diff=241036"/>
		<updated>2025-09-09T07:37:08Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CGscriptClass_Template&lt;br /&gt;
|Name=&amp;lt;nowiki&amp;gt;TenantMapping&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Tenant mapping and parent folder for the tenant&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|InheritsFrom=object|Methods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=TenantMappingRole|Name=&amp;lt;nowiki&amp;gt;AddRoleMapping&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;role&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;The tenant role to add&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Add blank Role mapping&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ToString&amp;lt;/nowiki&amp;gt;|Inherited=object|Description=&amp;lt;nowiki&amp;gt;The string representation of the object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Properties=&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ObjectTypeName&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;The name of the type of object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;ParentFolder&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;The parent folder id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=CompatibilityArray|Name=&amp;lt;nowiki&amp;gt;RoleMappings&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;List of role mappings&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=&amp;lt;nowiki&amp;gt;TypeInformation&amp;lt;/nowiki&amp;gt;|HasGetter=1|Inherited=object|Description=&amp;lt;nowiki&amp;gt;Get information about this class.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Tenant_class&amp;diff=241035</id>
		<title>Tenant class</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Tenant_class&amp;diff=241035"/>
		<updated>2025-09-09T07:35:43Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CGscriptClass_Template&lt;br /&gt;
|Name=&amp;lt;nowiki&amp;gt;Tenant&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Represents a SsoTenant.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|InheritsFrom=object|Methods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;AddPasswordCompatTenantUsers&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=Dictionary|Name=&amp;lt;nowiki&amp;gt;userRoles&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Dictionary of user id and array of roles&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;For backwards compatibility with username/password users, using this you can setup a user to belong to the current tenant with the given role list&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;RemovePasswordCompatTenantUsers&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=array|Name=&amp;lt;nowiki&amp;gt;users&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;User ids&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Remove all fake tenant roles for the given user ids&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Save&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Apply all changes to the SsoTenant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ToString&amp;lt;/nowiki&amp;gt;|Inherited=object|Description=&amp;lt;nowiki&amp;gt;The string representation of the object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Properties=&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TenantMapping|Name=&amp;lt;nowiki&amp;gt;Mapping&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Role mapping and parent folder for the tenant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ObjectTypeName&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;The name of the type of object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TenantOnboarding|Name=&amp;lt;nowiki&amp;gt;Onboarding&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Onboarding info for the tenant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=ResourceEdit|Name=&amp;lt;nowiki&amp;gt;ResourceModel&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Edit the Resource&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;TenantId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set the tenant id - e.g. for Microsoft this is a guid&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=&amp;lt;nowiki&amp;gt;TypeInformation&amp;lt;/nowiki&amp;gt;|HasGetter=1|Inherited=object|Description=&amp;lt;nowiki&amp;gt;Get information about this class.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|StaticMethods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Tenant|Name=&amp;lt;nowiki&amp;gt;Tenant_create&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Create a new SsoTenant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Tenant|Name=&amp;lt;nowiki&amp;gt;Tenant_getById&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;id&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Id of the item to fetch&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Fetch SsoTenant by primary key&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Tenant|Name=&amp;lt;nowiki&amp;gt;Tenant_getByTenantId&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;id&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Id of the item to fetch&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Fetch SsoTenant by tenant id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;color:#DF8621&amp;quot;&amp;gt;&#039;&#039;&#039;Examples&#039;&#039;&#039;&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Tenant t = Tenant_getById(tenatId);&lt;br /&gt;
//t.AddPasswordCompatTenantUsers({userId: {&amp;quot;mapping&amp;quot;}});&lt;br /&gt;
t.AddPasswordCompatTenantUsers({20708200: {&amp;quot;agent-1&amp;quot;}});&lt;br /&gt;
t.Save();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=ResourceEdit_class&amp;diff=241034</id>
		<title>ResourceEdit class</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=ResourceEdit_class&amp;diff=241034"/>
		<updated>2025-08-26T03:32:24Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: Created page with &amp;quot;{{CGscriptClass_Template |Name=&amp;lt;nowiki&amp;gt;ResourceEdit&amp;lt;/nowiki&amp;gt; |Description=&amp;lt;nowiki&amp;gt;Generic class for editing resources&amp;lt;/nowiki&amp;gt; |InheritsFrom=object|Methods= {{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ToString&amp;lt;/nowiki&amp;gt;|Inherited=object|Description=&amp;lt;nowiki&amp;gt;The string representation of the object.&amp;lt;/nowiki&amp;gt;}} |Properties= {{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;CalculatedManHours&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set c...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CGscriptClass_Template&lt;br /&gt;
|Name=&amp;lt;nowiki&amp;gt;ResourceEdit&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Generic class for editing resources&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|InheritsFrom=object|Methods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ToString&amp;lt;/nowiki&amp;gt;|Inherited=object|Description=&amp;lt;nowiki&amp;gt;The string representation of the object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Properties=&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;CalculatedManHours&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set calculated man hours flag&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;HasResourceTemplateId&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Indicates if resource can be templated&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;InheritAccess&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set inherit access flag&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ObjectTypeName&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;The name of the type of object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;ParentId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set the parent resource id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ResourceManHours&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set resource man hours&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;ResourceTemplateId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set resource template id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ShortName&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set the resource short name&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;TimeregEnabled&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set timereg enabled flag&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=&amp;lt;nowiki&amp;gt;TypeInformation&amp;lt;/nowiki&amp;gt;|HasGetter=1|Inherited=object|Description=&amp;lt;nowiki&amp;gt;Get information about this class.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Tenant_class&amp;diff=241033</id>
		<title>Tenant class</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Tenant_class&amp;diff=241033"/>
		<updated>2025-08-14T08:55:40Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CGscriptClass_Template&lt;br /&gt;
|Name=&amp;lt;nowiki&amp;gt;Tenant&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Represents a SsoTenant.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|InheritsFrom=object|Methods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;AddPasswordCompatTenantUsers&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=Dictionary|Name=&amp;lt;nowiki&amp;gt;userRoles&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Dictionary of user id and array of roles&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;For backwards compatibility with username/password users, using this you can setup a user to belong to the current tenant with the given role list&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;RemovePasswordCompatTenantUsers&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=array|Name=&amp;lt;nowiki&amp;gt;users&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;User ids&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Remove all fake tenant roles for the given user ids&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Save&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Apply all changes to the SsoTenant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ToString&amp;lt;/nowiki&amp;gt;|Inherited=object|Description=&amp;lt;nowiki&amp;gt;The string representation of the object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Properties=&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TenantMapping|Name=&amp;lt;nowiki&amp;gt;Mapping&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Role mapping and parent folder for the tenant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ObjectTypeName&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;The name of the type of object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TenantOnboarding|Name=&amp;lt;nowiki&amp;gt;Onboarding&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Onboarding info for the tenant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=ResourceEdit|Name=&amp;lt;nowiki&amp;gt;ResourceModel&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Edit the Resource&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;TenantId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set the tenant id - e.g. for Microsoft this is a guid&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=&amp;lt;nowiki&amp;gt;TypeInformation&amp;lt;/nowiki&amp;gt;|HasGetter=1|Inherited=object|Description=&amp;lt;nowiki&amp;gt;Get information about this class.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|StaticMethods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Tenant|Name=&amp;lt;nowiki&amp;gt;Tenant_create&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Create a new SsoTenant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Tenant|Name=&amp;lt;nowiki&amp;gt;Tenant_getById&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;id&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Id of the item to fetch&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Fetch SsoTenant by primary key. Returns Empty if not found&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;color:#DF8621&amp;quot;&amp;gt;&#039;&#039;&#039;Examples&#039;&#039;&#039;&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Tenant t = Tenant_getById(tenatId);&lt;br /&gt;
//t.AddPasswordCompatTenantUsers({userId: {&amp;quot;mapping&amp;quot;}});&lt;br /&gt;
t.AddPasswordCompatTenantUsers({20708200: {&amp;quot;agent-1&amp;quot;}});&lt;br /&gt;
t.Save();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Tenant_class&amp;diff=241032</id>
		<title>Tenant class</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Tenant_class&amp;diff=241032"/>
		<updated>2025-08-14T08:48:50Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CGscriptClass_Template&lt;br /&gt;
|Name=&amp;lt;nowiki&amp;gt;Tenant&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Represents a SsoTenant.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|InheritsFrom=object|Methods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;AddPasswordCompatTenantUsers&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=Dictionary|Name=&amp;lt;nowiki&amp;gt;userRoles&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Dictionary of user id and array of roles&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;For backwards compatibility with username/password users, using this you can setup a user to belong to the current tenant with the given role list&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;RemovePasswordCompatTenantUsers&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=array|Name=&amp;lt;nowiki&amp;gt;users&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;User ids&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Remove all fake tenant roles for the given user ids&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Save&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Apply all changes to the SsoTenant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ToString&amp;lt;/nowiki&amp;gt;|Inherited=object|Description=&amp;lt;nowiki&amp;gt;The string representation of the object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Properties=&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TenantMapping|Name=&amp;lt;nowiki&amp;gt;Mapping&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Role mapping and parent folder for the tenant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ObjectTypeName&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;The name of the type of object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TenantOnboarding|Name=&amp;lt;nowiki&amp;gt;Onboarding&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Onboarding info for the tenant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=ResourceEdit|Name=&amp;lt;nowiki&amp;gt;ResourceModel&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Edit the Resource&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;TenantId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set the tenant id - e.g. for Microsoft this is a guid&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=&amp;lt;nowiki&amp;gt;TypeInformation&amp;lt;/nowiki&amp;gt;|HasGetter=1|Inherited=object|Description=&amp;lt;nowiki&amp;gt;Get information about this class.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|StaticMethods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Tenant|Name=&amp;lt;nowiki&amp;gt;Tenant_create&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Create a new SsoTenant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Tenant|Name=&amp;lt;nowiki&amp;gt;Tenant_getById&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;id&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Id of the item to fetch&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Fetch SsoTenant by primary key. Returns Empty if not found&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Questionnaire_class&amp;diff=241031</id>
		<title>Questionnaire class</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Questionnaire_class&amp;diff=241031"/>
		<updated>2025-08-14T08:40:12Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CGscriptClass_Template&lt;br /&gt;
|Name=&amp;lt;nowiki&amp;gt;Questionnaire&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;The questionnaire object.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|InheritsFrom=object|Constructors=&lt;br /&gt;
{{CGscriptConstructors_Template|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;id&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Id of questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Fetch exists questionnaire by id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptConstructors_Template|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;qualifiedName&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Qualified name of questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Fetch exists questionnaire by name&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptConstructors_Template|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;name&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Questionnaire&#039;s name&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;parentId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Resource parent&#039;s id&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;layoutId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Questionnaire layout&#039;s id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Create new questionnaire with new questionnaire template and use default resource template&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptConstructors_Template|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;name&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Questionnaire&#039;s name&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;parentId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Resource parent&#039;s id&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;layoutId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Questionnaire layout&#039;s id&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;templateId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Questionnaire template&#039;s id&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;resourceTemplateId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Resource tempalte&#039;s id of questionnaire. Set it&#039;s 0 to use default resource template&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Create new questionnaire with exist template&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Methods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;GetLink&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Get the url to participate in answering the questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;RebuildSample&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Rebuild all sample rules in questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Save&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Save questionnaire. It also save for new questionnaire template, sample rule, quota. For update, you should call save in specific object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ToString&amp;lt;/nowiki&amp;gt;|Inherited=object|Description=&amp;lt;nowiki&amp;gt;The string representation of the object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Properties=&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=DateTime|Name=&amp;lt;nowiki&amp;gt;AutomaticCloseDate&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Automatic close date&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=DateTime|Name=&amp;lt;nowiki&amp;gt;AutomaticReleaseDate&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Automatic release date&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;AverageInterviewSucceededTime&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Average successful interview time&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;Completed&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Questionnaire status completed or not&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;CreatedByUserId&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;User created this questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=DateTime|Name=&amp;lt;nowiki&amp;gt;CreatedDate&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;When this questionnaire created&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=DateTime|Name=&amp;lt;nowiki&amp;gt;DevelopmentEndDate&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Development end date&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=DateTime|Name=&amp;lt;nowiki&amp;gt;DevelopmentStartDate&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Development start date&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;DisplayName&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Questionnaire name shown to respondents in their point list&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=number|Name=&amp;lt;nowiki&amp;gt;EstimatedTotalTime&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Estimated total time to run out questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;Id&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Reosurce id of questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;ImpersonationUserId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Run questionnaire context with permission of specific user. Set its value is 0 to remove&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;LayoutId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Questionnaire layout&#039;s id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;ModifiedByUserId&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;User last updated this questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=DateTime|Name=&amp;lt;nowiki&amp;gt;ModifiedDate&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Last time modify this questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;Name&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Questionnaire name&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;NumberOfActiveNotContacted&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Number of not started answer sheets which are related to active sample rules&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;NumberOfActiveSample&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Number of answer sheets that are related to existing sample rules and where these sample rules are active (you can deactivate sample rules in the CATI)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;NumberOfAvailable&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Number of answer sheets (both created via samples, from import, as well as through recurring links) that have not yet been answered.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;NumberOfAvailableActive&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Number of answer sheets which are still active for answering. In other words the available answer sheets minus any sheets that have failed (user does not want to answer)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;NumberOfCompleted&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Number of answer sheets which were completed&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;NumberOfCompletedToday&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Number of answer sheets which were completed on current date (server time-zone)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;NumberOfInterviewSucceeded&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Number of interviews carried out through CATI that were successful.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;NumberOfInterviewSucceededToday&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Number of interviews carried out through CATI that were successful on current date (server time-zone)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;NumberOfNotContacted&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Number of answer sheets which have yet not been started&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;NumberOfPartly&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Specifies the number of sample respondents that have partly answered the questionnaire (means they have at least clicked the link to open their personal version of the questionnaire)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;NumberOfSample&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Total number of answer sheets related to the questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;NumberOfTest&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Number of test answer sheets&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ObjectTypeName&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;The name of the type of object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;ParentId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Parent resource&#039;s id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;QualifiedName&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Get qualified name of questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=Array of Quota|Name=&amp;lt;nowiki&amp;gt;Quotas&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;All quotas associated with questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;ResourceTemplateId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Resource tempalte&#039;s id of questionnaire. Set it&#039;s 0 to use default resource template&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=Array of SampleRule|Name=&amp;lt;nowiki&amp;gt;SampleRules&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;All sample rules associated with questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=QuestionnaireStatus constant|Name=&amp;lt;nowiki&amp;gt;Status&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Questionnaire status. Use constant QUESTIONNAIRE_STATUS_xxx&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;Target&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Questionnaire target number&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;TemplateId&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Questionnaire template&#039;s id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;TimeEstimateId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Questionnaire time estimate&#039;s id. Set its value is 0 to remove&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;TimeEstimateName&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Questionnaire time estimate&#039;s name. Set its value is empty to remove&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=&amp;lt;nowiki&amp;gt;TypeInformation&amp;lt;/nowiki&amp;gt;|HasGetter=1|Inherited=object|Description=&amp;lt;nowiki&amp;gt;Get information about this class.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|StaticMethods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Questionnaire|Name=&amp;lt;nowiki&amp;gt;Questionnaire_current&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Get questionnaire in current QAS or PQ context&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;color:#DF8621&amp;quot;&amp;gt;&#039;&#039;&#039;Examples&#039;&#039;&#039;&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//create new qnaire and also new qnaireTemplate under&lt;br /&gt;
string qnaireName = &amp;quot;test&amp;quot;;&lt;br /&gt;
number parentId = 17148135;&lt;br /&gt;
number layoutId = 15735155;&lt;br /&gt;
Questionnaire qnaire = new Questionnaire (qnaireName, parentId, layoutId);&lt;br /&gt;
qnaire.ResourceTemplateId = 11088801;&lt;br /&gt;
qnaire.Save();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//create new qnaire using existing qnaireTemplate&lt;br /&gt;
string qnaireName = &amp;quot;test&amp;quot;;&lt;br /&gt;
number parentId = 17148135;&lt;br /&gt;
number layoutId = 15735155;&lt;br /&gt;
number qnaireTemplateId = 17148298;&lt;br /&gt;
number resourceTemplateId = 11088801;// set 0 to use the default&lt;br /&gt;
Questionnaire qnaire = new Questionnaire (qnaireName, parentId, layoutId, qnaireTemplateId, resourceTemplateId);&lt;br /&gt;
qnaire.Save();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Microsoft_login_Catglobe_Admin&amp;diff=241019</id>
		<title>Microsoft login Catglobe Admin</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Microsoft_login_Catglobe_Admin&amp;diff=241019"/>
		<updated>2025-07-28T10:44:50Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
Documentation for Catglobe site admins:&lt;br /&gt;
&lt;br /&gt;
= Setting up Sso =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
You need to contact Catglobe support to enable your site for Entra login.&lt;br /&gt;
&lt;br /&gt;
== Configuration steps ==&lt;br /&gt;
&lt;br /&gt;
==== AppProducts ====&lt;br /&gt;
&lt;br /&gt;
1. Setup AppProducts in your Catglobe site&lt;br /&gt;
&lt;br /&gt;
You can access the AppProducts list from the menu on your Catglobe site: ADMINISTRATION -&amp;gt; SINGLE-SIGN-ON -&amp;gt; AppProducts&lt;br /&gt;
&lt;br /&gt;
[[File:AppProduct1.png]]&lt;br /&gt;
&lt;br /&gt;
Or via the url: yourCatglobeSite/Sso/Admin/AppProducts&lt;br /&gt;
&lt;br /&gt;
Here you can see a create button, click on the button and follow the setup for your AppProduct&lt;br /&gt;
&lt;br /&gt;
[[File:AppProduct2.png]]&lt;br /&gt;
&lt;br /&gt;
2. Add Roles in your AppProduct&lt;br /&gt;
&lt;br /&gt;
At Roles step, you can see an Add Role button, click on the button to start setup roles&lt;br /&gt;
&lt;br /&gt;
[[File:AppProduct3.png]]&lt;br /&gt;
&lt;br /&gt;
3. Add group membership for each role&lt;br /&gt;
&lt;br /&gt;
While adding a role, you need to select a resource template and group membership. These will be assigned to the user when they login with Microsoft&lt;br /&gt;
&lt;br /&gt;
[[File:AppProduct401.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Tenants ====&lt;br /&gt;
1. Choose which external roles from the App Roles lists (See [[Microsoft_login|List of App Roles]]) should be given to your client. &lt;br /&gt;
&lt;br /&gt;
E.g. one of your products requires some kind of agent. So you tell them:&lt;br /&gt;
&lt;br /&gt;
Please map &amp;quot;Agent type 1&amp;quot; to the group of people you want to do &amp;quot;&amp;amp;lt;agent like role&amp;amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
2. Send your client instructions about the login page and the list of roles they need to configure groups for.&lt;br /&gt;
&lt;br /&gt;
3. Once the Admin has logged in once and registered the Tenant, you can find the Tenant in the list of Tenants under their email domain name.&lt;br /&gt;
&lt;br /&gt;
You can access Tenants list from the menu on your Catglobe site: ADMINISTRATION -&amp;gt; SINGLE-SIGN-ON -&amp;gt; Tenants&lt;br /&gt;
&lt;br /&gt;
[[File:Tenant1.png]]&lt;br /&gt;
&lt;br /&gt;
Or via the URL: yourCatglobeSite/Sso/Admin/Tenants&lt;br /&gt;
&lt;br /&gt;
4. Edit the Tenant to map the App roles to the desired list of AppProduct roles&lt;br /&gt;
&lt;br /&gt;
Select the Tenant on the Tenants list, then click the Edit button&lt;br /&gt;
&lt;br /&gt;
At the Role mapping step, map each role from the list you provided to the client, by selecting the corresponding key from the dropdown and clicking Add mapping &lt;br /&gt;
&lt;br /&gt;
[[File:Tenant201_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Then Click on “Add new role” to select corresponding roles from “AppProducts”&lt;br /&gt;
&lt;br /&gt;
[[File:Tenant203.png]]&lt;br /&gt;
&lt;br /&gt;
5. Their users can now click the &#039;Login with Microsoft&#039; button on the login page and will get the roles they have assigned to them.&lt;br /&gt;
&lt;br /&gt;
[[File:mslogin.png]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Tenant203.png&amp;diff=241018</id>
		<title>File:Tenant203.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Tenant203.png&amp;diff=241018"/>
		<updated>2025-07-28T10:42:11Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:AppProduct401.png&amp;diff=241017</id>
		<title>File:AppProduct401.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:AppProduct401.png&amp;diff=241017"/>
		<updated>2025-07-28T10:40:19Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Microsoft_login_Customer_Admin&amp;diff=241016</id>
		<title>Microsoft login Customer Admin</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Microsoft_login_Customer_Admin&amp;diff=241016"/>
		<updated>2025-07-28T10:27:33Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
Documentation for Customer admins: &lt;br /&gt;
&lt;br /&gt;
= Configure your Entra to login to Catglobe =&lt;br /&gt;
&lt;br /&gt;
Congratulations, instead of having to deal with usernames and password on your Catglobe based application you can now use Microsoft Entra login to access.&lt;br /&gt;
&lt;br /&gt;
== Information you need ==&lt;br /&gt;
&lt;br /&gt;
Your Catglobe contact should have given you:&lt;br /&gt;
&lt;br /&gt;
1. The url to the Catglobe powered application.&lt;br /&gt;
&lt;br /&gt;
2. A list of roles you need to give to your users&lt;br /&gt;
&lt;br /&gt;
==== Configuration steps ====&lt;br /&gt;
&lt;br /&gt;
1. Open the Url and click &amp;quot;Login with Microsoft&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:mslogin.png]]&lt;br /&gt;
&lt;br /&gt;
2. You should see a page informing you that your Tenant is new. Complete the registration process by clicking &amp;quot;Register&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:regisTenant.png]]&lt;br /&gt;
&lt;br /&gt;
3. If it says your tenant is already pending approval, someone else already did step 2.&lt;br /&gt;
&lt;br /&gt;
4. The Catglobe application now appears in your list of Enterprise applications in your tenant configuration.&lt;br /&gt;
&lt;br /&gt;
[[File:customeradmin102.png]]&lt;br /&gt;
&lt;br /&gt;
5. Add groups as you desire and assign them a Catglobe App role as instructed.&lt;br /&gt;
&lt;br /&gt;
[[File:customeradmin202.png]]&lt;br /&gt;
&lt;br /&gt;
6. Add users to your groups.&lt;br /&gt;
&lt;br /&gt;
7. Your users can now click the &#039;Login with Microsoft&#039; button on the login page and will get the roles you have assigned to them.&lt;br /&gt;
&lt;br /&gt;
[[File:mslogin.png]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Microsoft_login_Catglobe_Admin&amp;diff=241015</id>
		<title>Microsoft login Catglobe Admin</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Microsoft_login_Catglobe_Admin&amp;diff=241015"/>
		<updated>2025-07-28T10:19:07Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
Documentation for Catglobe site admins:&lt;br /&gt;
&lt;br /&gt;
= Setting up Sso =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
You need to contact Catglobe support to enable your site for Entra login.&lt;br /&gt;
&lt;br /&gt;
== Configuration steps ==&lt;br /&gt;
&lt;br /&gt;
==== AppProducts ====&lt;br /&gt;
&lt;br /&gt;
1. Setup AppProducts in your Catglobe site&lt;br /&gt;
&lt;br /&gt;
You can access the AppProducts list from the menu on your Catglobe site: ADMINISTRATION -&amp;gt; SINGLE-SIGN-ON -&amp;gt; AppProducts&lt;br /&gt;
&lt;br /&gt;
[[File:AppProduct1.png]]&lt;br /&gt;
&lt;br /&gt;
Or via the url: yourCatglobeSite/Sso/Admin/AppProducts&lt;br /&gt;
&lt;br /&gt;
Here you can see a create button, click on the button and follow the setup for your AppProduct&lt;br /&gt;
&lt;br /&gt;
[[File:AppProduct2.png]]&lt;br /&gt;
&lt;br /&gt;
2. Add Roles in your AppProduct&lt;br /&gt;
&lt;br /&gt;
At Roles step, you can see an Add Role button, click on the button to start setup roles&lt;br /&gt;
&lt;br /&gt;
[[File:AppProduct3.png]]&lt;br /&gt;
&lt;br /&gt;
3. Add group membership for each role&lt;br /&gt;
&lt;br /&gt;
While adding a role, you need to select a resource template and group membership. These will be assigned to the user when they login with Microsoft&lt;br /&gt;
&lt;br /&gt;
[[File:AppProduct44.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Tenants ====&lt;br /&gt;
1. Choose which external roles from the App Roles lists (See [[Microsoft_login|List of App Roles]]) should be given to your client. &lt;br /&gt;
&lt;br /&gt;
E.g. one of your products requires some kind of agent. So you tell them:&lt;br /&gt;
&lt;br /&gt;
Please map &amp;quot;Agent type 1&amp;quot; to the group of people you want to do &amp;quot;&amp;amp;lt;agent like role&amp;amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
2. Send your client instructions about the login page and the list of roles they need to configure groups for.&lt;br /&gt;
&lt;br /&gt;
3. Once the Admin has logged in once and registered the Tenant, you can find the Tenant in the list of Tenants under their email domain name.&lt;br /&gt;
&lt;br /&gt;
You can access Tenants list from the menu on your Catglobe site: ADMINISTRATION -&amp;gt; SINGLE-SIGN-ON -&amp;gt; Tenants&lt;br /&gt;
&lt;br /&gt;
[[File:Tenant1.png]]&lt;br /&gt;
&lt;br /&gt;
Or via the URL: yourCatglobeSite/Sso/Admin/Tenants&lt;br /&gt;
&lt;br /&gt;
4. Edit the Tenant to map the App roles to the desired list of AppProduct roles&lt;br /&gt;
&lt;br /&gt;
Select the Tenant on the Tenants list, then click the Edit button&lt;br /&gt;
&lt;br /&gt;
At the Role mapping step, map each role from the list you provided to the client, by selecting the corresponding key from the dropdown and clicking Add mapping &lt;br /&gt;
&lt;br /&gt;
[[File:Tenant201_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Then Click on “Add new role” to select corresponding roles from “AppProducts”&lt;br /&gt;
&lt;br /&gt;
[[File:Tenant202.png]]&lt;br /&gt;
&lt;br /&gt;
5. Their users can now click the &#039;Login with Microsoft&#039; button on the login page and will get the roles they have assigned to them.&lt;br /&gt;
&lt;br /&gt;
[[File:mslogin.png]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Microsoft_login_Catglobe_Admin&amp;diff=241014</id>
		<title>Microsoft login Catglobe Admin</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Microsoft_login_Catglobe_Admin&amp;diff=241014"/>
		<updated>2025-07-28T10:18:13Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Guides]]&lt;br /&gt;
Documentation for Catglobe site admins:&lt;br /&gt;
&lt;br /&gt;
= Setting up Sso =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
You need to contact Catglobe support to enable your site for Entra login.&lt;br /&gt;
&lt;br /&gt;
== Configuration steps ==&lt;br /&gt;
&lt;br /&gt;
==== AppProducts ====&lt;br /&gt;
&lt;br /&gt;
1. Setup AppProducts in your Catglobe site&lt;br /&gt;
&lt;br /&gt;
You can access AppProducts from the menu on your Catglobe site: ADMINISTRATION -&amp;gt; SINGLE-SIGN-ON -&amp;gt; AppProducts&lt;br /&gt;
&lt;br /&gt;
[[File:AppProduct1.png]]&lt;br /&gt;
&lt;br /&gt;
Or via the url: yourCatglobeSite/Sso/Admin/AppProducts&lt;br /&gt;
&lt;br /&gt;
Here you can see a create button, click on the button and follow the setup for your AppProduct&lt;br /&gt;
&lt;br /&gt;
[[File:AppProduct2.png]]&lt;br /&gt;
&lt;br /&gt;
2. Add Roles in your AppProduct&lt;br /&gt;
&lt;br /&gt;
At Roles step, you can see an Add Role button, click on the button to start setup roles&lt;br /&gt;
&lt;br /&gt;
[[File:AppProduct3.png]]&lt;br /&gt;
&lt;br /&gt;
3. Add group membership for each role&lt;br /&gt;
&lt;br /&gt;
While adding a role, you need to select a resource template and group membership. These will be assigned to the user when they login with Microsoft&lt;br /&gt;
&lt;br /&gt;
[[File:AppProduct44.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Tenants ====&lt;br /&gt;
1. Choose which external roles from the App Roles lists (See [[Microsoft_login|List of App Roles]]) should be given to your client. &lt;br /&gt;
&lt;br /&gt;
E.g. one of your products requires some kind of agent. So you tell them:&lt;br /&gt;
&lt;br /&gt;
Please map &amp;quot;Agent type 1&amp;quot; to the group of people you want to do &amp;quot;&amp;amp;lt;agent like role&amp;amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
2. Send your client instructions about the login page and the list of roles they need to configure groups for.&lt;br /&gt;
&lt;br /&gt;
3. Once the Admin has logged in once and registered the Tenant, you can find the Tenant in the list of Tenants under their email domain name.&lt;br /&gt;
&lt;br /&gt;
You can access Tenants list from the menu on your Catglobe site: ADMINISTRATION -&amp;gt; SINGLE-SIGN-ON -&amp;gt; Tenants&lt;br /&gt;
&lt;br /&gt;
[[File:Tenant1.png]]&lt;br /&gt;
&lt;br /&gt;
Or via the URL: yourCatglobeSite/Sso/Admin/Tenants&lt;br /&gt;
&lt;br /&gt;
4. Edit the Tenant to map the App roles to the desired list of AppProduct roles&lt;br /&gt;
&lt;br /&gt;
Select the Tenant on the Tenants list, then click the Edit button&lt;br /&gt;
&lt;br /&gt;
At the Role mapping step, map each role from the list you provided to the client, by selecting the corresponding key from the dropdown and clicking Add mapping &lt;br /&gt;
&lt;br /&gt;
[[File:Tenant201_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Then Click on “Add new role” to select corresponding roles from “AppProducts”&lt;br /&gt;
&lt;br /&gt;
[[File:Tenant202.png]]&lt;br /&gt;
&lt;br /&gt;
5. Their users can now click the &#039;Login with Microsoft&#039; button on the login page and will get the roles they have assigned to them.&lt;br /&gt;
&lt;br /&gt;
[[File:mslogin.png]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Tenant201_2.jpg&amp;diff=241013</id>
		<title>File:Tenant201 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Tenant201_2.jpg&amp;diff=241013"/>
		<updated>2025-07-28T10:16:21Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Tenant201_1.jpg&amp;diff=241012</id>
		<title>File:Tenant201 1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Tenant201_1.jpg&amp;diff=241012"/>
		<updated>2025-07-28T10:10:28Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Tenant202.png&amp;diff=241011</id>
		<title>File:Tenant202.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Tenant202.png&amp;diff=241011"/>
		<updated>2025-07-28T09:49:42Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Tenant201.png&amp;diff=241010</id>
		<title>File:Tenant201.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Tenant201.png&amp;diff=241010"/>
		<updated>2025-07-28T09:49:32Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Tenant22.png&amp;diff=241009</id>
		<title>File:Tenant22.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Tenant22.png&amp;diff=241009"/>
		<updated>2025-07-28T09:49:20Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Tenant2.png&amp;diff=241008</id>
		<title>File:Tenant2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Tenant2.png&amp;diff=241008"/>
		<updated>2025-07-28T09:49:11Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Tenant1.png&amp;diff=241007</id>
		<title>File:Tenant1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Tenant1.png&amp;diff=241007"/>
		<updated>2025-07-28T09:49:02Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:RegisTenant.png&amp;diff=241006</id>
		<title>File:RegisTenant.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:RegisTenant.png&amp;diff=241006"/>
		<updated>2025-07-28T09:48:49Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Mslogin.png&amp;diff=241005</id>
		<title>File:Mslogin.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Mslogin.png&amp;diff=241005"/>
		<updated>2025-07-28T09:48:39Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Customeradmin202.png&amp;diff=241004</id>
		<title>File:Customeradmin202.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Customeradmin202.png&amp;diff=241004"/>
		<updated>2025-07-28T09:48:29Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Customeradmin201.png&amp;diff=241003</id>
		<title>File:Customeradmin201.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Customeradmin201.png&amp;diff=241003"/>
		<updated>2025-07-28T09:48:14Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Customeradmin102.png&amp;diff=241002</id>
		<title>File:Customeradmin102.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Customeradmin102.png&amp;diff=241002"/>
		<updated>2025-07-28T09:47:51Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Customeradmin101.png&amp;diff=241001</id>
		<title>File:Customeradmin101.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Customeradmin101.png&amp;diff=241001"/>
		<updated>2025-07-28T09:47:37Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:AppProduct44.png&amp;diff=241000</id>
		<title>File:AppProduct44.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:AppProduct44.png&amp;diff=241000"/>
		<updated>2025-07-28T09:47:24Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:AppProduct3.png&amp;diff=240999</id>
		<title>File:AppProduct3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:AppProduct3.png&amp;diff=240999"/>
		<updated>2025-07-28T09:47:10Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:AppProduct2.png&amp;diff=240998</id>
		<title>File:AppProduct2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:AppProduct2.png&amp;diff=240998"/>
		<updated>2025-07-28T09:46:34Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:AppProduct1.png&amp;diff=240997</id>
		<title>File:AppProduct1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:AppProduct1.png&amp;diff=240997"/>
		<updated>2025-07-28T09:46:02Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Script_on_Cati_call&amp;diff=240986</id>
		<title>Script on Cati call</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Script_on_Cati_call&amp;diff=240986"/>
		<updated>2025-06-26T09:45:57Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CATI_module]]&lt;br /&gt;
= Script on Cati call =&lt;br /&gt;
Add the ability to call a script after each time a number has been dialed, also set via the cati settings. This will allow us better control of when to do various stuff, and also allow custom logic for some cases... e.g. in the rerecruitment we can say that when it reach the maxdial status, then we opt people out of panel. Or we can send SMS to people with answering machines that we will call them back.&lt;br /&gt;
It should be noticed that the calling of this script is on the critical path, and must therefore be severely restricted in the amount of work done, ie in the case of sending SMS, the only thing the script should do is add respondent to a group and another script scheduled to run e,g. every 30 min takes care of the actual sending of SMS.&lt;br /&gt;
&lt;br /&gt;
The script gets the following parameters:&lt;br /&gt;
&lt;br /&gt;
1. The current cati contact in same format as returned from [[CATI_getCATIContacts]]&lt;br /&gt;
&lt;br /&gt;
2. Times called&lt;br /&gt;
&lt;br /&gt;
The current user context is set to the user of the qas, and the qas context is the dialed qas.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
Define &amp;quot;Script to execute after call&amp;quot; at CATI setting on Fieldwork management:&lt;br /&gt;
&lt;br /&gt;
[[File:2018-05-23_15-25-57.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Script on Workflow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Example script to add/remove the user to/from a group &lt;br /&gt;
array a = Workflow_getParameters();&lt;br /&gt;
array currentCatiContact = a[0];//same format as returned from CATI_getCATIContacts&lt;br /&gt;
number timesCalled = a[1];&lt;br /&gt;
//QAS qas = QAS_getCurrentQAS();//The qas context is the dialed qas&lt;br /&gt;
User user = User_getQasUser();//The current user context is set to the user of the qas&lt;br /&gt;
number maxCallLimit = 5;//your limit&lt;br /&gt;
if(timesCalled &amp;gt;= maxCallLimit){&lt;br /&gt;
    Group_addUser(user.ResourceId, groupAdd) ;//yourGroup&lt;br /&gt;
	Group_removeUser(user.ResourceId, groupRemove) ;//yourGroup&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:2018-05-23_15-39-30.png]]&lt;br /&gt;
&lt;br /&gt;
Please note that if the code has an error, it will not be thrown; Cati will continue to call normally.&lt;br /&gt;
If you want to catch errors, you should use a try-catch block and send the error back to yourself.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
object e;&lt;br /&gt;
try{&lt;br /&gt;
	//do something&lt;br /&gt;
}catch(e){&lt;br /&gt;
	sendEmail(&amp;quot;yourEmail&amp;quot;,&amp;quot;Alias&amp;quot;,&amp;quot;Subject&amp;quot;,e.Message,&amp;quot;fromEmail&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Script_on_Cati_call&amp;diff=240985</id>
		<title>Script on Cati call</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Script_on_Cati_call&amp;diff=240985"/>
		<updated>2025-06-26T09:43:12Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CATI_module]]&lt;br /&gt;
= Script on Cati call =&lt;br /&gt;
Add the ability to call a script after each time a number has been dialed, also set via the cati settings. This will allow us better control of when to do various stuff, and also allow custom logic for some cases... e.g. in the rerecruitment we can say that when it reach the maxdial status, then we opt people out of panel. Or we can send SMS to people with answering machines that we will call them back.&lt;br /&gt;
It should be noticed that the calling of this script is on the critical path, and must therefore be severely restricted in the amount of work done, ie in the case of sending SMS, the only thing the script should do is add respondent to a group and another script scheduled to run e,g. every 30 min takes care of the actual sending of SMS.&lt;br /&gt;
&lt;br /&gt;
The script gets the following parameters:&lt;br /&gt;
&lt;br /&gt;
1. The current cati contact in same format as returned from [[CATI_getCATIContacts]]&lt;br /&gt;
&lt;br /&gt;
2. Times called&lt;br /&gt;
&lt;br /&gt;
The current user context is set to the user of the qas, and the qas context is the dialed qas.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
Define &amp;quot;Script to execute after call&amp;quot; at CATI setting on Fieldwork management:&lt;br /&gt;
&lt;br /&gt;
[[File:2018-05-23_15-25-57.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Script on Workflow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Example script to set disable user who reach max call and remove the user from a group &lt;br /&gt;
array a = Workflow_getParameters();&lt;br /&gt;
array currentCatiContact = a[0];//same format as returned from CATI_getCATIContacts&lt;br /&gt;
number timesCalled = a[1];&lt;br /&gt;
//QAS qas = QAS_getCurrentQAS();//The qas context is the dialed qas&lt;br /&gt;
User user = User_getQasUser();//The current user context is set to the user of the qas&lt;br /&gt;
number maxCallLimit = 5;//your limit&lt;br /&gt;
if(timesCalled &amp;gt;= maxCallLimit){&lt;br /&gt;
	Group_removeUser(user.ResourceId, groupRemove) ;//yourGroup&lt;br /&gt;
	//Group_addUser(user.ResourceId, groupAdd) ;//yourGroup&lt;br /&gt;
	user.Disabled = true;&lt;br /&gt;
	user.Save();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:2018-05-23_15-39-30.png]]&lt;br /&gt;
&lt;br /&gt;
Please note that if the code has an error, it will not be thrown; Cati will continue to call normally.&lt;br /&gt;
If you want to catch errors, you should use a try-catch block and send the error back to yourself.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
object e;&lt;br /&gt;
try{&lt;br /&gt;
	//do something&lt;br /&gt;
}catch(e){&lt;br /&gt;
	sendEmail(&amp;quot;yourEmail&amp;quot;,&amp;quot;Alias&amp;quot;,&amp;quot;Subject&amp;quot;,e.Message,&amp;quot;fromEmail&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Script_on_Cati_call&amp;diff=240984</id>
		<title>Script on Cati call</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Script_on_Cati_call&amp;diff=240984"/>
		<updated>2025-06-26T09:25:34Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CATI_module]]&lt;br /&gt;
= Script on Cati call =&lt;br /&gt;
Add the ability to call a script after each time a number has been dialed, also set via the cati settings. This will allow us better control of when to do various stuff, and also allow custom logic for some cases... e.g. in the rerecruitment we can say that when it reach the maxdial status, then we opt people out of panel. Or we can send SMS to people with answering machines that we will call them back.&lt;br /&gt;
It should be noticed that the calling of this script is on the critical path, and must therefore be severely restricted in the amount of work done, ie in the case of sending SMS, the only thing the script should do is add respondent to a group and another script scheduled to run e,g. every 30 min takes care of the actual sending of SMS.&lt;br /&gt;
&lt;br /&gt;
The script gets the following parameters:&lt;br /&gt;
&lt;br /&gt;
1. The current cati contact in same format as returned from [[CATI_getCATIContacts]]&lt;br /&gt;
&lt;br /&gt;
2. Times called&lt;br /&gt;
&lt;br /&gt;
The current user context is set to the user of the qas, and the qas context is the dialed qas.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
Define &amp;quot;Script to execute after call&amp;quot; at CATI setting on Fieldwork management:&lt;br /&gt;
&lt;br /&gt;
[[File:2018-05-23_15-25-57.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Script on Workflow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Example script to set disable user who reach max call and remove the user from a group &lt;br /&gt;
array a = Workflow_getParameters();&lt;br /&gt;
array currentCatiContact = a[0];//same format as returned from CATI_getCATIContacts&lt;br /&gt;
number timesCalled = a[1];&lt;br /&gt;
//QAS qas = QAS_getCurrentQAS();//The qas context is the dialed qas&lt;br /&gt;
User user = User_getQasUser();//The current user context is set to the user of the qas&lt;br /&gt;
number maxCallLimit = 5;//your limit&lt;br /&gt;
if(timesCalled &amp;gt;= maxCallLimit){&lt;br /&gt;
	Group_removeUser(user.ResourceId, groupRemove) ;//yourGroup&lt;br /&gt;
	//Group_addUser(user.ResourceId, groupAdd) ;//yourGroup&lt;br /&gt;
	user.Disabled = true;&lt;br /&gt;
	user.Save();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:2018-05-23_15-39-30.png]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Script_on_Cati_call&amp;diff=240983</id>
		<title>Script on Cati call</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Script_on_Cati_call&amp;diff=240983"/>
		<updated>2025-06-26T09:14:57Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:CATI_module]]&lt;br /&gt;
= Script on Cati call =&lt;br /&gt;
Add the ability to call a script after each time a number has been dialed, also set via the cati settings. This will allow us better control of when to do various stuff, and also allow custom logic for some cases... e.g. in the rerecruitment we can say that when it reach the maxdial status, then we opt people out of panel. Or we can send SMS to people with answering machines that we will call them back.&lt;br /&gt;
It should be noticed that the calling of this script is on the critical path, and must therefore be severely restricted in the amount of work done, ie in the case of sending SMS, the only thing the script should do is add respondent to a group and another script scheduled to run e,g. every 30 min takes care of the actual sending of SMS.&lt;br /&gt;
&lt;br /&gt;
The script gets the following parameters:&lt;br /&gt;
&lt;br /&gt;
1. The current cati contact in same format as returned from [[CATI_getCATIContacts]]&lt;br /&gt;
&lt;br /&gt;
2. Times called&lt;br /&gt;
&lt;br /&gt;
The current user context is set to the user of the qas, and the qas context is the dialed qas.&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
Define &amp;quot;Script to execute after call&amp;quot; at CATI setting on Fieldwork management:&lt;br /&gt;
&lt;br /&gt;
[[File:2018-05-23_15-25-57.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Script on Workflow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Example script to set disable user who reach max call and remove the user from a group &lt;br /&gt;
array a = Workflow_getParameters();&lt;br /&gt;
array currentCatiContact = a[0];//same format as returned from CATI_getCATIContacts&lt;br /&gt;
number timesCalled = a[1];&lt;br /&gt;
//QAS qas = QAS_getCurrentQAS();//The qas context is the dialed qas&lt;br /&gt;
User user = User_getQasUser();//The current user context is set to the user of the qas&lt;br /&gt;
number maxCallLimit = 5;//your limit&lt;br /&gt;
if(timesCalled &amp;gt;= maxCallLimit){&lt;br /&gt;
	Group_removeUser(user.ResourceId, groupId) ;//yourGroup&lt;br /&gt;
	user.Disabled = true;&lt;br /&gt;
	user.Save();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:2018-05-23_15-39-30.png]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Make_oidc_work_with_respondents_auth_with_guid_only&amp;diff=240976</id>
		<title>Make oidc work with respondents auth with guid only</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Make_oidc_work_with_respondents_auth_with_guid_only&amp;diff=240976"/>
		<updated>2025-04-22T06:56:38Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To automatically direct respondents to an external site (which is already authenticated by Catglobe) upon clicking the survey link, bypassing a login prompt, we can proceed as follows:&lt;br /&gt;
&lt;br /&gt;
Input the cgscript on gateway workflow or on the questionnaire dummy:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Script for gateway&lt;br /&gt;
return oidc_site + &amp;quot;authentication/login?respondent=&amp;quot; + User_getQasUser().ResourceGuid + &amp;quot;&amp;amp;respondent_secret=&amp;quot; + QAS_getCurrentQAS().AccessCode;&lt;br /&gt;
//Script for dummy&lt;br /&gt;
sendToUrl(oidc_site + &amp;quot;authentication/login?respondent=&amp;quot; + User_getQasUser().ResourceGuid + &amp;quot;&amp;amp;respondent_secret=&amp;quot; + QAS_getCurrentQAS().AccessCode);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then send invitation mail to respondents. When a respondent clicks on survey link in mail, they&#039;ll be redirected to external site and automatically logged in. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s the flow diagram, to shows how this works&lt;br /&gt;
&lt;br /&gt;
[[File:Oidc_authR.jpg]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=ImportManager_class&amp;diff=240975</id>
		<title>ImportManager class</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=ImportManager_class&amp;diff=240975"/>
		<updated>2025-04-14T05:28:07Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CGscriptClass_Template&lt;br /&gt;
|Name=&amp;lt;nowiki&amp;gt;ImportManager&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Import data and users.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|InheritsFrom=object|Constructors=&lt;br /&gt;
{{CGscriptConstructors_Template|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=array|Name=&amp;lt;nowiki&amp;gt;Headers&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;A list of string that are the header names&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=array|Name=&amp;lt;nowiki&amp;gt;data&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Data to import. An array of arrays of equal length as the headers&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;advancedMode&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Enable setting advanced settings - Requires special navigation access&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;groupResourceId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Group to add users to new users to and/or sample rule. Set to 0 to not add to group&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Make a new import with the given data&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Methods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=array|Name=&amp;lt;nowiki&amp;gt;GetPossibleAutoMasForData&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Get default automaps. First value is column name, second is actual import field&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=array|Name=&amp;lt;nowiki&amp;gt;GetPossibleAutoMasForUser&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Get default automaps. First value is column name, second is actual import field&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Dictionary|Name=&amp;lt;nowiki&amp;gt;Import&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Run the Import. Note that this will commit any pending changes&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Dictionary|Name=&amp;lt;nowiki&amp;gt;SetDataImportOptions&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;projectQuestionnaireResourceId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;The resource Id of where the data should be added/updated&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;type&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;How to treat when already have existing answer sheets. 1 for Zero or One AnswerSheet, 2 for delete existing and create new, 3 for mapping to rpqIdColumnName&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;idColumnName&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Mapping for column name in case type is 3 or 4&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;isCommaSeparatedFormat&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Import multi questions as comma separated format&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=Dictionary|Name=&amp;lt;nowiki&amp;gt;mapping&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Mapping between header names and import names. If empty, automapping is used&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Set specific options for importing data or altering existing data&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;SetDefaultNewUser&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;languageIso&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Default language&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;cultureIso&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Default culture&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;currency&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Default currency&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Defaults for new users. If empty or not set, uses the global defaults&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;SetUserImportOptions&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;userIdColumnName&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;The header name of the userId column&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;userNameMask&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;The mask used to create new usernames - an advanced setting&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;generatePasswords&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;OBSOLETE. Always false. Generate passwords during import&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;importUserInfo&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Import or Update users&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;importPhoneNumber&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Import or Update phonenumbers&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;importAddress&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Import or Update addresses&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;importPoints&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Import or Update points&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;importQualification&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Import or Update qualifications&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=array|Name=&amp;lt;nowiki&amp;gt;permissions&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Determine which groups should have access to the new users&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=Dictionary|Name=&amp;lt;nowiki&amp;gt;mapping&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Mapping between header names and import names. If empty, automapping is used&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;OBSOLETE. Use the new overload with parentResourceId.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Dictionary|Name=&amp;lt;nowiki&amp;gt;SetUserImportOptions&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;userIdColumnName&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;The header name of the userId column&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;userNameMask&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;The mask used to create new usernames - an advanced setting&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;generatePasswords&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;OBSOLETE. Always false. Generate passwords during import&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;importUserInfo&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Import or Update users&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;importPhoneNumber&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Import or Update phonenumbers&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;importAddress&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Import or Update addresses&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;importPoints&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Import or Update points&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;importQualification&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Import or Update qualifications&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;parentResourceId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Resource Id of the parent of the new users. Ignored if updating users&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=Dictionary|Name=&amp;lt;nowiki&amp;gt;mapping&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Mapping between header names and import names. If empty, automapping is used&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Set specific options for importing new users or altering existing users&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ToString&amp;lt;/nowiki&amp;gt;|Inherited=object|Description=&amp;lt;nowiki&amp;gt;The string representation of the object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;Validate&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Same as Validate(true)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;Validate&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;errorOnSemiOpenQuestion&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Set to false if you need to import to questions with open parts and know that it may partially delete existing data&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Validate prior to actual importing. Throws if errors, otherwise returns warning.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Properties=&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;Culture&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set the culture used during import in case we don&#039;t want to use the logged-in-user&#039;s one (UseLoggedInUsersCultureDuringImport = false)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;Language&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set the language used when importing text&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ObjectTypeName&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;The name of the type of object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=&amp;lt;nowiki&amp;gt;TypeInformation&amp;lt;/nowiki&amp;gt;|HasGetter=1|Inherited=object|Description=&amp;lt;nowiki&amp;gt;Get information about this class.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;UseLoggedInUsersCultureDuringImport&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set if the culture used during import is the same as the logged in user or invariant culture. Default is invariant&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;color:#DF8621&amp;quot;&amp;gt;&#039;&#039;&#039;Examples&#039;&#039;&#039;&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// EX for making import qnaire data without user (acreate new qas with no user)&lt;br /&gt;
array Headers={&amp;quot;Q2&amp;quot;,&amp;quot;Q4&amp;quot;,&amp;quot;Q5&amp;quot;,&amp;quot;TextValue&amp;quot;,&amp;quot;NumberValue&amp;quot;};&lt;br /&gt;
array Data={{1,&amp;quot;q4&amp;quot;,1,&amp;quot;Text1&amp;quot;,1}};&lt;br /&gt;
Bool advancedMode=false;&lt;br /&gt;
number groupResourceId =0;&lt;br /&gt;
ImportManager iM = new ImportManager (Headers, Data, advancedMode, groupResourceId);&lt;br /&gt;
number qnaireRId = 15546533;&lt;br /&gt;
number type=1;&lt;br /&gt;
string rpqIdColumnName=&amp;quot;&amp;quot;;&lt;br /&gt;
bool isCommaSeparatedFormat = true;&lt;br /&gt;
Dictionary mapping = new Dictionary();&lt;br /&gt;
iM.SetDataImportOptions(qnaireRId,type,rpqIdColumnName,isCommaSeparatedFormat,mapping);&lt;br /&gt;
iM.Validate();&lt;br /&gt;
iM.Import();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//EX for import data to an existing answer sheet&lt;br /&gt;
array Headers={&amp;quot;RPQId&amp;quot;,&amp;quot;Q2&amp;quot;,&amp;quot;Q4&amp;quot;,&amp;quot;Q5&amp;quot;,&amp;quot;TextValue&amp;quot;,&amp;quot;NumberValue&amp;quot;};&lt;br /&gt;
array Data={{1742872963,1,&amp;quot;q4&amp;quot;,1,&amp;quot;Text1&amp;quot;,1}};&lt;br /&gt;
Bool advancedMode=false;&lt;br /&gt;
number groupResourceId =0;&lt;br /&gt;
ImportManager iM = new ImportManager (Headers, Data, advancedMode, groupResourceId);&lt;br /&gt;
number qnaireRId = 15546533;&lt;br /&gt;
number type=3;&lt;br /&gt;
string rpqIdColumnName=&amp;quot;RPQId&amp;quot;;&lt;br /&gt;
bool isCommaSeparatedFormat = true;&lt;br /&gt;
Dictionary mapping = new Dictionary();&lt;br /&gt;
iM.SetDataImportOptions(qnaireRId,type,rpqIdColumnName,isCommaSeparatedFormat,mapping);&lt;br /&gt;
iM.Validate();&lt;br /&gt;
iM.Import();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//EX for import new user info and phone number&lt;br /&gt;
array Headers={&amp;quot;First name&amp;quot;,&amp;quot;Last name&amp;quot;,&amp;quot;User_Email&amp;quot;,&amp;quot;Language&amp;quot;,&amp;quot;Culture&amp;quot;,&amp;quot;PhoneType_NotIdentified&amp;quot;,&amp;quot;User_CountryCode&amp;quot;};&lt;br /&gt;
array Data={{&amp;quot;TestFirstName&amp;quot;,&amp;quot;TestLastName&amp;quot;,&amp;quot;so@testmail.com&amp;quot;,&amp;quot;da-DK&amp;quot;,&amp;quot;da-DK&amp;quot;,&amp;quot;12345678&amp;quot;,&amp;quot;dk&amp;quot;}};&lt;br /&gt;
Bool advancedMode=false;&lt;br /&gt;
number groupResourceId =15548117;&lt;br /&gt;
ImportManager iM = new ImportManager (Headers, Data, advancedMode, groupResourceId);&lt;br /&gt;
string userIdColumnName=&amp;quot;&amp;quot;;&lt;br /&gt;
string userNameMask=&amp;quot;&amp;quot;;&lt;br /&gt;
bool generatePasswords=true; &lt;br /&gt;
bool importUserInfo = true;&lt;br /&gt;
bool importPhoneNumber = true;&lt;br /&gt;
bool importAddress=false;&lt;br /&gt;
bool importPoints =false;&lt;br /&gt;
bool importQualification=false;&lt;br /&gt;
number parentResourceId= 15546533;&lt;br /&gt;
Dictionary mapping = new Dictionary();&lt;br /&gt;
iM.SetUserImportOptions(userIdColumnName,userNameMask,generatePasswords,importUserInfo,importPhoneNumber,importAddress,importPoints,importQualification,parentResourceId,mapping);&lt;br /&gt;
iM.Validate();&lt;br /&gt;
iM.Import();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//EX for importing new user and new qas&lt;br /&gt;
array Headers={&amp;quot;First name&amp;quot;,&amp;quot;Last name&amp;quot;,&amp;quot;User_Email&amp;quot;,&amp;quot;Language&amp;quot;,&amp;quot;Culture&amp;quot;,&amp;quot;PhoneType_NotIdentified&amp;quot;,&amp;quot;User_CountryCode&amp;quot;,&amp;quot;Q2&amp;quot;,&amp;quot;Q4&amp;quot;,&amp;quot;Q5&amp;quot;,&amp;quot;TextValue&amp;quot;,&amp;quot;NumberValue&amp;quot;};&lt;br /&gt;
array Data={{&amp;quot;TestFirstName&amp;quot;,&amp;quot;TestLastName&amp;quot;,&amp;quot;so@testmail.com&amp;quot;,&amp;quot;da-DK&amp;quot;,&amp;quot;da-DK&amp;quot;,&amp;quot;12345678&amp;quot;,&amp;quot;dk&amp;quot;,1,&amp;quot;q4&amp;quot;,1,&amp;quot;Text1&amp;quot;,1}};&lt;br /&gt;
Bool advancedMode=false;&lt;br /&gt;
number groupResourceId =15548117; &lt;br /&gt;
ImportManager iM = new ImportManager (Headers, Data, advancedMode, groupResourceId); &lt;br /&gt;
string userIdColumnName=&amp;quot;&amp;quot;;&lt;br /&gt;
string userNameMask=&amp;quot;&amp;quot;;&lt;br /&gt;
bool generatePasswords=true; &lt;br /&gt;
bool importUserInfo = true;&lt;br /&gt;
bool importPhoneNumber = true;&lt;br /&gt;
bool importAddress=false;&lt;br /&gt;
bool importPoints =false;&lt;br /&gt;
bool importQualification=false;&lt;br /&gt;
number parentResourceId= 15546533;&lt;br /&gt;
Dictionary mapping = new Dictionary(); &lt;br /&gt;
iM.SetUserImportOptions(userIdColumnName,userNameMask,generatePasswords,importUserInfo,importPhoneNumber,importAddress,importPoints,importQualification,parentResourceId,mapping);&lt;br /&gt;
number qnaireRId = 15546533;&lt;br /&gt;
number type=1;&lt;br /&gt;
string rpqIdColumnName=&amp;quot;&amp;quot;;&lt;br /&gt;
bool isCommaSeparatedFormat = true;&lt;br /&gt;
//Dictionary mapping = new Dictionary();&lt;br /&gt;
iM.SetDataImportOptions(qnaireRId,type,rpqIdColumnName,isCommaSeparatedFormat,mapping); &lt;br /&gt;
iM.Validate();&lt;br /&gt;
iM.Import();&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Using SetDefaultNewUser&lt;br /&gt;
array Headers={&amp;quot;First name&amp;quot;,&amp;quot;Last name&amp;quot;,&amp;quot;User_Email&amp;quot;};&lt;br /&gt;
array Data={{&amp;quot;TestFirstName&amp;quot;,&amp;quot;TestLastName&amp;quot;,&amp;quot;so@testmail.com&amp;quot;}};&lt;br /&gt;
Bool advancedMode=false;&lt;br /&gt;
number groupResourceId =15548117; &lt;br /&gt;
ImportManager iM = new ImportManager (Headers, Data, advancedMode, groupResourceId); &lt;br /&gt;
string userIdColumnName=&amp;quot;&amp;quot;;&lt;br /&gt;
string userNameMask=&amp;quot;&amp;quot;;&lt;br /&gt;
bool generatePasswords=true; &lt;br /&gt;
bool importUserInfo = true;&lt;br /&gt;
bool importPhoneNumber = true;&lt;br /&gt;
bool importAddress=false;&lt;br /&gt;
bool importPoints =false;&lt;br /&gt;
bool importQualification=false;&lt;br /&gt;
number parentResourceId= 15546533;&lt;br /&gt;
Dictionary mapping = new Dictionary(); &lt;br /&gt;
iM.SetUserImportOptions(userIdColumnName,userNameMask,generatePasswords,importUserInfo,importPhoneNumber,importAddress,importPoints,importQualification,parentResourceId,mapping);&lt;br /&gt;
string languageIso=&amp;quot;da-DK&amp;quot;;&lt;br /&gt;
string cultureIso=&amp;quot;da-DK&amp;quot;;&lt;br /&gt;
string currency=&amp;quot;USD&amp;quot;;&lt;br /&gt;
iM.SetDefaultNewUser(languageIso, cultureIso,currency ); &lt;br /&gt;
iM.Validate();&lt;br /&gt;
iM.Import();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Update an existing user&lt;br /&gt;
array Headers={&amp;quot;userId&amp;quot;,&amp;quot;Language&amp;quot;,&amp;quot;Culture&amp;quot;,&amp;quot;Currency&amp;quot;};&lt;br /&gt;
array Data={{&amp;quot;90414076&amp;quot;,&amp;quot;da-DK&amp;quot;,&amp;quot;da-DK&amp;quot;,&amp;quot;USD&amp;quot;}};&lt;br /&gt;
Bool advancedMode=false;&lt;br /&gt;
number groupResourceId =15548117;&lt;br /&gt;
ImportManager iM = new ImportManager (Headers, Data, advancedMode, groupResourceId); &lt;br /&gt;
string userIdColumnName=&amp;quot;userId&amp;quot;;&lt;br /&gt;
string userNameMask=&amp;quot;&amp;quot;;&lt;br /&gt;
bool generatePasswords=true; &lt;br /&gt;
bool importUserInfo = true;&lt;br /&gt;
bool importPhoneNumber = true;&lt;br /&gt;
bool importAddress=false;&lt;br /&gt;
bool importPoints =false;&lt;br /&gt;
bool importQualification=false;&lt;br /&gt;
number parentResourceId= 15546533;&lt;br /&gt;
Dictionary mapping = new Dictionary();&lt;br /&gt;
iM.SetUserImportOptions(userIdColumnName,userNameMask,generatePasswords,importUserInfo,importPhoneNumber,importAddress,importPoints,importQualification,parentResourceId,mapping);&lt;br /&gt;
iM.Validate();&lt;br /&gt;
iM.Import();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//update an existing qas by CustomerId (using SetDataImportOptions with type 4)&lt;br /&gt;
//CustomerID must be a text field, not numeric&lt;br /&gt;
array Headers={&amp;quot;CustomerID&amp;quot;,&amp;quot;Q1&amp;quot;,&amp;quot;Age&amp;quot;};&lt;br /&gt;
array Data={{&amp;quot;AB123&amp;quot;,2,1}};&lt;br /&gt;
Bool advancedMode=false;&lt;br /&gt;
number groupResourceId =0;&lt;br /&gt;
ImportManager iM = new ImportManager (Headers, Data, advancedMode, groupResourceId);&lt;br /&gt;
number qnaireRId = 15562388;&lt;br /&gt;
number type=4;&lt;br /&gt;
string idColumnName=&amp;quot;CustomerID&amp;quot;;&lt;br /&gt;
bool isCommaSeparatedFormat = true;&lt;br /&gt;
Dictionary mapping = new Dictionary();&lt;br /&gt;
iM.SetDataImportOptions(qnaireRId,type,idColumnName,isCommaSeparatedFormat,mapping);&lt;br /&gt;
iM.Validate();&lt;br /&gt;
iM.Import();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Set culture while import. If not set will use &amp;quot;.&amp;quot; format, example: &amp;quot;45.967&amp;quot;&lt;br /&gt;
//Set Culture work combine with UseLoggedInUsersCultureDuringImport=false&lt;br /&gt;
array Headers={&amp;quot;qNumber&amp;quot;};&lt;br /&gt;
array Data={{&amp;quot;45,967&amp;quot;}};&lt;br /&gt;
Bool advancedMode=false;&lt;br /&gt;
number groupResourceId =0;&lt;br /&gt;
ImportManager iM = new ImportManager (Headers, Data, advancedMode, groupResourceId);&lt;br /&gt;
number qnaireRId = 15636598;&lt;br /&gt;
number type=1;&lt;br /&gt;
string rpqIdColumnName=&amp;quot;&amp;quot;;&lt;br /&gt;
bool isCommaSeparatedFormat = true;&lt;br /&gt;
Dictionary mapping = new Dictionary();&lt;br /&gt;
//iM.UseLoggedInUsersCultureDuringImport=false;&lt;br /&gt;
iM.Culture = &amp;quot;da-DK&amp;quot;;&lt;br /&gt;
iM.SetDataImportOptions(qnaireRId,type,rpqIdColumnName,isCommaSeparatedFormat,mapping);&lt;br /&gt;
iM.Validate();&lt;br /&gt;
iM.Import();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//set language while import. If don&#039;t set, will use login user language&lt;br /&gt;
array Headers={&amp;quot;RPQ_StartDato&amp;quot;,&amp;quot;RPQ_SlutDato&amp;quot;,&amp;quot;RPQ_Status&amp;quot;, &amp;quot;Q1&amp;quot;};&lt;br /&gt;
array Data={{&amp;quot;2018-06-18 02:49:06&amp;quot;,&amp;quot;2018-06-18 02:51:44&amp;quot;,&amp;quot;Successfuldt interview&amp;quot;, &amp;quot;1&amp;quot;}};&lt;br /&gt;
Bool advancedMode=true;&lt;br /&gt;
number groupResourceId =0;&lt;br /&gt;
ImportManager iM = new ImportManager (Headers, Data, advancedMode, groupResourceId);&lt;br /&gt;
number qnaireRId = 15636646;&lt;br /&gt;
number type=1;&lt;br /&gt;
string rpqIdColumnName=&amp;quot;&amp;quot;;&lt;br /&gt;
bool isCommaSeparatedFormat = true;&lt;br /&gt;
Dictionary mapping = new Dictionary();&lt;br /&gt;
iM.Language = &amp;quot;da-DK&amp;quot;;&lt;br /&gt;
iM.SetDataImportOptions(qnaireRId,type,rpqIdColumnName,isCommaSeparatedFormat,mapping);&lt;br /&gt;
iM.Validate();&lt;br /&gt;
iM.Import();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Make_oidc_work_with_respondents_auth_with_guid_only&amp;diff=240974</id>
		<title>Make oidc work with respondents auth with guid only</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Make_oidc_work_with_respondents_auth_with_guid_only&amp;diff=240974"/>
		<updated>2025-04-03T10:21:45Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If we want to automatically link respondents to an external site (oidc_site) that uses authentication from Catglobe, without making them log in. Here&#039;s how we can do:&lt;br /&gt;
&lt;br /&gt;
Input the cgscript on gateway workflow or on the questionnaire dummy:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//Script for gateway&lt;br /&gt;
return oidc_site + &amp;quot;authentication/login?respondent=&amp;quot; + User_getQasUser().ResourceGuid + &amp;quot;&amp;amp;respondent_secret=&amp;quot; + QAS_getCurrentQAS().AccessCode;&lt;br /&gt;
//Script for dummy&lt;br /&gt;
sendToUrl(oidc_site + &amp;quot;authentication/login?respondent=&amp;quot; + User_getQasUser().ResourceGuid + &amp;quot;&amp;amp;respondent_secret=&amp;quot; + QAS_getCurrentQAS().AccessCode);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then send invitation mail to respondents. When a respondent clicks on survey link in mail, they&#039;ll be redirected to external site and automatically logged in. &lt;br /&gt;
&lt;br /&gt;
Here&#039;s the flow diagram, to shows how this works&lt;br /&gt;
&lt;br /&gt;
[[File:Oidc_authR.jpg]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Workflow_setGlobal&amp;diff=240973</id>
		<title>Workflow setGlobal</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Workflow_setGlobal&amp;diff=240973"/>
		<updated>2025-04-03T09:24:42Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Workflow_setGlobal====&lt;br /&gt;
Set values for scripts invoked from [[WorkflowScript_class]]&lt;br /&gt;
&lt;br /&gt;
====== Syntax====== &lt;br /&gt;
Workflow_setGlobal(string parameterName, AnyType value)&lt;br /&gt;
======  Return type ====== &lt;br /&gt;
Empty&lt;br /&gt;
======  Examples ====== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Workflow_setGlobal(&amp;quot;x&amp;quot;, 1000);&lt;br /&gt;
//Get global value on dynamic script &lt;br /&gt;
string script = &amp;quot;&lt;br /&gt;
	number a = 1;&lt;br /&gt;
	return a + Workflow_getGlobal(\&amp;quot;x\&amp;quot;);&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
WorkflowScript wfS = new WorkflowScript (script, false);&lt;br /&gt;
wfS.Call();//1001&lt;br /&gt;
//Get global value on existing wokflow&lt;br /&gt;
wfS = new WorkflowScript (wf);&lt;br /&gt;
wfS.Call();//1002&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
script on the above wf:&lt;br /&gt;
number a = 2;&lt;br /&gt;
return a + Workflow_getGlobal(&amp;quot;x&amp;quot;);&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:General_Functions]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Workflow_getGlobal&amp;diff=240972</id>
		<title>Workflow getGlobal</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Workflow_getGlobal&amp;diff=240972"/>
		<updated>2025-04-03T09:23:50Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== Workflow_getGlobal====&lt;br /&gt;
Get values for scripts invoked from [[WorkflowScript_class]]&lt;br /&gt;
&lt;br /&gt;
====== Syntax====== &lt;br /&gt;
Workflow_getGlobal(string parameterName)&lt;br /&gt;
======  Return type ====== &lt;br /&gt;
AnyType&lt;br /&gt;
======  Examples ====== &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Workflow_setGlobal(&amp;quot;x&amp;quot;, 1000);&lt;br /&gt;
//Get global value on dynamic script &lt;br /&gt;
string script = &amp;quot;&lt;br /&gt;
	number a = 1;&lt;br /&gt;
	return a + Workflow_getGlobal(\&amp;quot;x\&amp;quot;);&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
WorkflowScript wfS = new WorkflowScript (script, false);&lt;br /&gt;
wfS.Call();//1001&lt;br /&gt;
//Get global value on existing wokflow&lt;br /&gt;
wfS = new WorkflowScript (wf);&lt;br /&gt;
wfS.Call();//1002&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
script on the above wf:&lt;br /&gt;
number a = 2;&lt;br /&gt;
return a + Workflow_getGlobal(&amp;quot;x&amp;quot;);&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:General_Functions]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=DateTime_fromJson&amp;diff=240971</id>
		<title>DateTime fromJson</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=DateTime_fromJson&amp;diff=240971"/>
		<updated>2025-04-03T09:22:28Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== DateTime_fromJson====&lt;br /&gt;
Convert DateTime string Json to [[DateTime_class]]&lt;br /&gt;
======Syntax======&lt;br /&gt;
DateTime_fromJson(string DateTime)&lt;br /&gt;
====== Arguments ======&lt;br /&gt;
DateTime is in string format yyyy-MM-ddThh:mm:ss.msZ&lt;br /&gt;
====== Return type ======&lt;br /&gt;
[[DateTime_class]]&lt;br /&gt;
====== Examples ======&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
string dtJson = &amp;quot;2024-12-30T08:22:23.9900000Z&amp;quot;;&lt;br /&gt;
DateTime dateTime =  DateTime_fromJson(dtJson);//2024-12-30 08:22:23&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Category:General_Functions]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=DateTime_toJson&amp;diff=240970</id>
		<title>DateTime toJson</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=DateTime_toJson&amp;diff=240970"/>
		<updated>2025-04-03T09:21:26Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== DateTime_toJson====&lt;br /&gt;
Convert [[DateTime_class]] or DateTime array to string &lt;br /&gt;
======Syntax======&lt;br /&gt;
DateTime_toJson(DateTime[, Type])&lt;br /&gt;
====== Arguments ======&lt;br /&gt;
DateTime can be [[DateTime_class]] or DateTime array&lt;br /&gt;
&lt;br /&gt;
Type number: 0 for return full DateTime (default), 1 for return DateOnly, 2 for return TimeOnly&lt;br /&gt;
====== Return type ======&lt;br /&gt;
string of datetime, format yyyy-MM-ddThh:mm:ss.msZ&lt;br /&gt;
====== Examples ======&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
DateTime dateTime = new DateTime();&lt;br /&gt;
//array dateTime = getDateTime();&lt;br /&gt;
string dtJson;&lt;br /&gt;
dtJson = DateTime_toJson(dateTime);//2024-12-30T08:22:23.9900000Z&lt;br /&gt;
dtJson = DateTime_toJson(dateTime, 1);//2024-12-30&lt;br /&gt;
dtJson = DateTime_toJson(dateTime, 2);//08:22:23.9900000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Category:General_Functions]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=DateTime_fromJson&amp;diff=240969</id>
		<title>DateTime fromJson</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=DateTime_fromJson&amp;diff=240969"/>
		<updated>2025-04-03T09:19:46Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==== DateTime_fromJson====&lt;br /&gt;
Convert DateTime string Json to [[DateTime_class]]&lt;br /&gt;
====Syntax====&lt;br /&gt;
DateTime_fromJson(string DateTime)&lt;br /&gt;
==== Arguments ====&lt;br /&gt;
DateTime is in string format yyyy-MM-ddThh:mm:ss.msZ&lt;br /&gt;
==== Return type ====&lt;br /&gt;
[[DateTime_class]]&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
string dtJson = &amp;quot;2024-12-30T08:22:23.9900000Z&amp;quot;;&lt;br /&gt;
DateTime dateTime =  DateTime_fromJson(dtJson);//2024-12-30 08:22:23&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Category:General_Functions]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=OidcAuthenticationFlow_class&amp;diff=240968</id>
		<title>OidcAuthenticationFlow class</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=OidcAuthenticationFlow_class&amp;diff=240968"/>
		<updated>2025-04-03T09:09:40Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CGscriptClass_Template&lt;br /&gt;
|Name=&amp;lt;nowiki&amp;gt;OidcAuthenticationFlow&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Specification of a Authentication Flow oidc client&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|InheritsFrom=object|Methods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Delete&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Delete this client&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Save&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Save the Oidc client&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;SetClientSecret&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;secret&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;The new secret&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Set Oidc client secret&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ToString&amp;lt;/nowiki&amp;gt;|Inherited=object|Description=&amp;lt;nowiki&amp;gt;The string representation of the object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Properties=&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;AppRolesScriptId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set id of the script that determines cg_roles claim to let your app do role based security. This must run with impersonation and be public. 0 to unset&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;AskUserForConsent&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set ask user for consent when connecting&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;CanAuthRespondent&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set if the respondent can login via redirect from qas&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;CanKeepSecret&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set if the application can keep secret (ie. false for an SPA)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ClientId&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Oidc client id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=LocalizedString|Name=&amp;lt;nowiki&amp;gt;DisplayNames&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set display names&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;IsBuiltIn&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;True, if a system client&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;Layout&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set layout to use for login screen&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ObjectTypeName&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;The name of the type of object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=Array of strings|Name=&amp;lt;nowiki&amp;gt;OptionalScopes&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set optional scopes&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;OwnerResourceId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set owner resource id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=Array of strings|Name=&amp;lt;nowiki&amp;gt;PostLogoutRedirectUris&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set post logout redirect URIs&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=Array of strings|Name=&amp;lt;nowiki&amp;gt;RedirectUris&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set redirect URIs accepted to return user to after auth&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=Array of strings|Name=&amp;lt;nowiki&amp;gt;Scopes&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set scopes&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=&amp;lt;nowiki&amp;gt;TypeInformation&amp;lt;/nowiki&amp;gt;|HasGetter=1|Inherited=object|Description=&amp;lt;nowiki&amp;gt;Get information about this class.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|StaticMethods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=OidcAuthenticationFlow|Name=&amp;lt;nowiki&amp;gt;OidcAuthenticationFlow_createOrUpdate&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;clientId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Oidc client id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Create a new oidc client or update existing based on clientId&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=OidcAuthenticationFlow|Name=&amp;lt;nowiki&amp;gt;OidcAuthenticationFlow_getByClientId&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;clientId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Oidc client id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Get a single known client&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Array of OidcAuthenticationFlow|Name=&amp;lt;nowiki&amp;gt;OidcAuthenticationFlow_getList&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Get a list of clients, ordered by clientId&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:Oidc_authR.jpg&amp;diff=240967</id>
		<title>File:Oidc authR.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:Oidc_authR.jpg&amp;diff=240967"/>
		<updated>2025-04-03T08:59:27Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Make_oidc_work_with_respondents_auth_with_guid_only&amp;diff=240966</id>
		<title>Make oidc work with respondents auth with guid only</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Make_oidc_work_with_respondents_auth_with_guid_only&amp;diff=240966"/>
		<updated>2025-04-03T08:59:12Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: Created page with &amp;quot;File:Oidc_authR.jpg Category:Guides&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Oidc_authR.jpg]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=OidcServer2ServerClient_class&amp;diff=240965</id>
		<title>OidcServer2ServerClient class</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=OidcServer2ServerClient_class&amp;diff=240965"/>
		<updated>2025-04-03T08:44:00Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: Created page with &amp;quot;{{CGscriptClass_Template |Name=&amp;lt;nowiki&amp;gt;OidcServer2ServerClient&amp;lt;/nowiki&amp;gt; |Description=&amp;lt;nowiki&amp;gt;Specification of a Client Authentication oidc client&amp;lt;/nowiki&amp;gt; |InheritsFrom=object|Methods= {{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Delete&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Delete this client&amp;lt;/nowiki&amp;gt;}} {{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Save&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Save the Oidc client&amp;lt;/nowiki&amp;gt;}} {{CGscriptMethods_Template|ReturnType=Empty|...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CGscriptClass_Template&lt;br /&gt;
|Name=&amp;lt;nowiki&amp;gt;OidcServer2ServerClient&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Specification of a Client Authentication oidc client&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|InheritsFrom=object|Methods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Delete&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Delete this client&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Save&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Save the Oidc client&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;SetClientSecret&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;secret&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;The new secret&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Set Oidc client secret&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ToString&amp;lt;/nowiki&amp;gt;|Inherited=object|Description=&amp;lt;nowiki&amp;gt;The string representation of the object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Properties=&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ClientId&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Oidc client id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=LocalizedString|Name=&amp;lt;nowiki&amp;gt;DisplayNames&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set display names&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;IsBuiltIn&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;True, if a system client&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ObjectTypeName&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;The name of the type of object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;OwnerResourceId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set owner resource id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;RunAsUserId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set id of the impersonated user&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=Array of strings|Name=&amp;lt;nowiki&amp;gt;Scopes&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get scopes&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=&amp;lt;nowiki&amp;gt;TypeInformation&amp;lt;/nowiki&amp;gt;|HasGetter=1|Inherited=object|Description=&amp;lt;nowiki&amp;gt;Get information about this class.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|StaticMethods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=OidcServer2ServerClient|Name=&amp;lt;nowiki&amp;gt;OidcServer2ServerClient_createOrUpdate&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;clientId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Oidc client id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Create a new oidc client or update existing based on clientId&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=OidcServer2ServerClient|Name=&amp;lt;nowiki&amp;gt;OidcServer2ServerClient_getByClientId&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;clientId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Oidc client id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Get a single known client&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Array of OidcServer2ServerClient|Name=&amp;lt;nowiki&amp;gt;OidcServer2ServerClient_getList&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Get a list of clients, ordered by clientId&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=OidcAuthenticationFlow_class&amp;diff=240964</id>
		<title>OidcAuthenticationFlow class</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=OidcAuthenticationFlow_class&amp;diff=240964"/>
		<updated>2025-04-03T08:43:22Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: Created page with &amp;quot;{{CGscriptClass_Template |Name=&amp;lt;nowiki&amp;gt;OidcAuthenticationFlow&amp;lt;/nowiki&amp;gt; |Description=&amp;lt;nowiki&amp;gt;Specification of a Authentication Flow oidc client&amp;lt;/nowiki&amp;gt; |InheritsFrom=object|Methods= {{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Delete&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Delete this client&amp;lt;/nowiki&amp;gt;}} {{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Save&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Save the Oidc client&amp;lt;/nowiki&amp;gt;}} {{CGscriptMethods_Template|ReturnType=Empty|Nam...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CGscriptClass_Template&lt;br /&gt;
|Name=&amp;lt;nowiki&amp;gt;OidcAuthenticationFlow&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Specification of a Authentication Flow oidc client&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|InheritsFrom=object|Methods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Delete&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Delete this client&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Save&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Save the Oidc client&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;SetClientSecret&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;secret&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;The new secret&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Set Oidc client secret&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ToString&amp;lt;/nowiki&amp;gt;|Inherited=object|Description=&amp;lt;nowiki&amp;gt;The string representation of the object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Properties=&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;AppRolesScriptId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set id of the script that determines cg_roles claim to let your app do role based security. 0 to unset&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;AskUserForConsent&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set ask user for consent when connecting&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;CanAuthRespondent&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set if the respondent can login via redirect from qas&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;CanKeepSecret&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set if the application can keep secret (ie. false for an SPA)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ClientId&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Oidc client id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=LocalizedString|Name=&amp;lt;nowiki&amp;gt;DisplayNames&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set display names&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;IsBuiltIn&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;True, if a system client&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;Layout&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set layout to use for login screen&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ObjectTypeName&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;The name of the type of object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=Array of strings|Name=&amp;lt;nowiki&amp;gt;OptionalScopes&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set optional scopes&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;OwnerResourceId&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set owner resource id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=Array of strings|Name=&amp;lt;nowiki&amp;gt;PostLogoutRedirectUris&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set post logout redirect URIs&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=Array of strings|Name=&amp;lt;nowiki&amp;gt;RedirectUris&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set redirect URIs accepted to return user to after auth&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=Array of strings|Name=&amp;lt;nowiki&amp;gt;Scopes&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/set scopes&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=&amp;lt;nowiki&amp;gt;TypeInformation&amp;lt;/nowiki&amp;gt;|HasGetter=1|Inherited=object|Description=&amp;lt;nowiki&amp;gt;Get information about this class.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|StaticMethods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=OidcAuthenticationFlow|Name=&amp;lt;nowiki&amp;gt;OidcAuthenticationFlow_createOrUpdate&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;clientId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Oidc client id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Create a new oidc client or update existing based on clientId&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=OidcAuthenticationFlow|Name=&amp;lt;nowiki&amp;gt;OidcAuthenticationFlow_getByClientId&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;clientId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Oidc client id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Get a single known client&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Array of OidcAuthenticationFlow|Name=&amp;lt;nowiki&amp;gt;OidcAuthenticationFlow_getList&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Get a list of clients, ordered by clientId&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=File:2025-01-06_13-54-36.jpg&amp;diff=240963</id>
		<title>File:2025-01-06 13-54-36.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=File:2025-01-06_13-54-36.jpg&amp;diff=240963"/>
		<updated>2025-04-03T08:42:07Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=QuestionnaireBatchJob_class&amp;diff=240962</id>
		<title>QuestionnaireBatchJob class</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=QuestionnaireBatchJob_class&amp;diff=240962"/>
		<updated>2025-04-03T08:41:27Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: Created page with &amp;quot;{{CGscriptClass_Template |Name=&amp;lt;nowiki&amp;gt;QuestionnaireBatchJob&amp;lt;/nowiki&amp;gt; |Description=&amp;lt;nowiki&amp;gt;Process each QAS with some custom logic in a optimal way.&amp;lt;/nowiki&amp;gt; |InheritsFrom=object|Constructors= {{CGscriptConstructors_Template|Parameters= {{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;questionnaireId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Id of the base questionnaire&amp;lt;/nowiki&amp;gt;}} |Description=&amp;lt;nowiki&amp;gt;Process each QAS with some custom logic in a optimal way.&amp;lt;/nowiki&amp;gt;}} |Methods= {...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{CGscriptClass_Template&lt;br /&gt;
|Name=&amp;lt;nowiki&amp;gt;QuestionnaireBatchJob&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Process each QAS with some custom logic in a optimal way.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|InheritsFrom=object|Constructors=&lt;br /&gt;
{{CGscriptConstructors_Template|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;questionnaireId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Id of the base questionnaire&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Process each QAS with some custom logic in a optimal way.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Methods=&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;AttachQuestionnaire&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;questionnaireId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Id of the questionnaire&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;latestOnly&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;If user has multiple qas, only include last created or error&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;completedOnly&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Limit by qas that is completed&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;questionLabel&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Label of the question to load&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Load readonly question from another questionnaire based on UserId&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;AttachQuestionnaire&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=int|Name=&amp;lt;nowiki&amp;gt;questionnaireId&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Id of the questionnaire&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;latestOnly&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;If user has multiple qas, only include last created or error&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=bool|Name=&amp;lt;nowiki&amp;gt;completedOnly&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Limit by qas that is completed&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;questionLabel&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Label of the question to load&amp;lt;/nowiki&amp;gt;|Comma=,}}{{CGscriptParameters_Template|Type=string|Name=&amp;lt;nowiki&amp;gt;alias&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;Alias to use in execute parameter naming&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Load readonly question from another questionnaire based on UserId with an alias&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=Empty|Name=&amp;lt;nowiki&amp;gt;Execute&amp;lt;/nowiki&amp;gt;|Parameters=&lt;br /&gt;
{{CGscriptParameters_Template|Type=Function|Name=&amp;lt;nowiki&amp;gt;runner&amp;lt;/nowiki&amp;gt;|Description=&amp;lt;nowiki&amp;gt;The function called for each QAS - parameter names infers which questions to load&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Description=&amp;lt;nowiki&amp;gt;Run the batch job - implicitly saves all modified question data&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptMethods_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ToString&amp;lt;/nowiki&amp;gt;|Inherited=object|Description=&amp;lt;nowiki&amp;gt;The string representation of the object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|Properties=&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;CompletedOnly&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/Set Limit by qas that is completed. Default true&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;CurrentCompleted&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/Set current qas to completed or not&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=int|Name=&amp;lt;nowiki&amp;gt;CurrentId&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Get current qas id&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;CurrentIsTest&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;Get current qas is test qas&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;IncludeTest&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/Set if include test qas. Default false&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=bool|Name=&amp;lt;nowiki&amp;gt;LatestOnly&amp;lt;/nowiki&amp;gt;|HasGetter=1|HasSetter=1|Description=&amp;lt;nowiki&amp;gt;Get/Set If user has multiple qas, only include last created or all. Default false&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=string|Name=&amp;lt;nowiki&amp;gt;ObjectTypeName&amp;lt;/nowiki&amp;gt;|HasGetter=1|Description=&amp;lt;nowiki&amp;gt;The name of the type of object.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{CGscriptProperties_Template|ReturnType=TypeInformation|Name=&amp;lt;nowiki&amp;gt;TypeInformation&amp;lt;/nowiki&amp;gt;|HasGetter=1|Inherited=object|Description=&amp;lt;nowiki&amp;gt;Get information about this class.&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
}}&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;color:#DF8621&amp;quot;&amp;gt;&#039;&#039;&#039;Examples&#039;&#039;&#039;&amp;lt;/span&amp;gt; ===&lt;br /&gt;
For instance, we have the cgscript, run in batch mode before, like this:&lt;br /&gt;
&lt;br /&gt;
[[File:2025-01-06_12-24-11.jpg]]&lt;br /&gt;
&lt;br /&gt;
With new Qnaire workflow prompt, to run batch script, just do as follow:&lt;br /&gt;
* Open the Workflow prompt in Qnaire as normal (on questionnaire list, select a questionnaire, then click on menu &#039;&#039;&#039;Tool/Workflow script&#039;&#039;&#039; to open questionnaire workflow prompt): &lt;br /&gt;
Default script will be displayed to guide how to use QuestionnaireBatchJob class&lt;br /&gt;
* Replace the default script with your own script as necessary.&lt;br /&gt;
* Click Execute to run script &lt;br /&gt;
&lt;br /&gt;
[[File:2025-01-06_13-54-36.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So, the script run batch mode above should be updated to use QuestionnaireBatchJob class, looks like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
QuestionnaireBatchJob batch = new QuestionnaireBatchJob(0);&lt;br /&gt;
//batch.LatestOnly = false;&lt;br /&gt;
//batch.CompletedOnly = true;&lt;br /&gt;
//batch.IncludeTest = false;&lt;br /&gt;
array errorQAS;&lt;br /&gt;
batch.Execute(function(Question Q100_Relation_New, Question Q6_Awareness){&lt;br /&gt;
	QAS qas = new QAS(batch.CurrentId);&lt;br /&gt;
	if(qas.Status == 5){&lt;br /&gt;
		if(Q100_Relation_New[5] == empty &amp;amp;&amp;amp; Q6_Awareness == [34]){&lt;br /&gt;
			errorQAS.Add(batch.CurrentId);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
});&lt;br /&gt;
print(errorQAS.Count);&lt;br /&gt;
print(errorQAS);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
	<entry>
		<id>https://wiki.catglobe.com/index.php?title=Workflow_setGlobal&amp;diff=240961</id>
		<title>Workflow setGlobal</title>
		<link rel="alternate" type="text/html" href="https://wiki.catglobe.com/index.php?title=Workflow_setGlobal&amp;diff=240961"/>
		<updated>2025-04-03T08:40:19Z</updated>

		<summary type="html">&lt;p&gt;Nguyenduyan: Created page with &amp;quot;== Workflow_setGlobal== Set values for scripts invoked from WorkflowScript_class  ==Syntax== Workflow_setGlobal(string parameterName, AnyType value) == Return type == Empty == Examples ==  &amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt; Workflow_setGlobal(&amp;quot;x&amp;quot;, 1000); //Get global value on dynamic script  string script = &amp;quot; 	number a = 1; 	return a + Workflow_getGlobal(\&amp;quot;x\&amp;quot;); &amp;quot;; WorkflowScript wfS = new WorkflowScript (script, false); wfS.Call();//1001 //Get global value on existing wokfl...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Workflow_setGlobal==&lt;br /&gt;
Set values for scripts invoked from [[WorkflowScript_class]]&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
Workflow_setGlobal(string parameterName, AnyType value)&lt;br /&gt;
== Return type ==&lt;br /&gt;
Empty&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Workflow_setGlobal(&amp;quot;x&amp;quot;, 1000);&lt;br /&gt;
//Get global value on dynamic script &lt;br /&gt;
string script = &amp;quot;&lt;br /&gt;
	number a = 1;&lt;br /&gt;
	return a + Workflow_getGlobal(\&amp;quot;x\&amp;quot;);&lt;br /&gt;
&amp;quot;;&lt;br /&gt;
WorkflowScript wfS = new WorkflowScript (script, false);&lt;br /&gt;
wfS.Call();//1001&lt;br /&gt;
//Get global value on existing wokflow&lt;br /&gt;
wfS = new WorkflowScript (wf);&lt;br /&gt;
wfS.Call();//1002&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
script on the above wf:&lt;br /&gt;
number a = 2;&lt;br /&gt;
return a + Workflow_getGlobal(&amp;quot;x&amp;quot;);&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:General_Functions]]&lt;/div&gt;</summary>
		<author><name>Nguyenduyan</name></author>
	</entry>
</feed>