<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://greggsmith.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kowy</id>
		<title>SDU - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://greggsmith.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kowy"/>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Special:Contributions/Kowy"/>
		<updated>2026-04-17T13:00:22Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.1</generator>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Attrs_by_index&amp;diff=4548</id>
		<title>Attrs by index</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Attrs_by_index&amp;diff=4548"/>
				<updated>2012-03-16T14:11:41Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method can be used to fetch attributes from a recordset just returned from [[Send_WaitCall_attrSync_fetch|sync_fetch]] and it should be faster then [[dob_by_index|dob_by_index]] method, because it doesn't need to create full dob in memory, but only specified attributes. It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object recordset, &amp;quot;attrs_by_index&amp;quot;, int start_index, int end_index, &amp;quot;DEFAULT&amp;quot;, int attrs_num [, var attrs])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''timeout'' - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* ''recordset'' - object returned from [[Send_WaitCall_attrSync_fetch|sync_fetch]] method&lt;br /&gt;
* ''start_index'' - from which index do you want to iterate? Must by between 0 and item_count-1&lt;br /&gt;
* ''end_index'' - to which index do you want to iterate? Must by between 0 and item_count-1&lt;br /&gt;
* ''attrs_num'' - number of following  attributes&lt;br /&gt;
* ''attributes'' - each attribute of fetched object you want to return should be passed its name as a string here&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
On success the resulted list is filled into a global array '''msg''' as follows:&lt;br /&gt;
* msg[0] - SD system attribute used for enumeration (NEXT, LAST or EOF can be here)&lt;br /&gt;
* msg[1] - item Persistent ID&lt;br /&gt;
* msg[2] - empty?&lt;br /&gt;
* msg[3] - index in the recordset&lt;br /&gt;
* msg[4] - number of returned attributes (should be same as attrs_num)&lt;br /&gt;
* msg[5] - value of the first asked attribute&lt;br /&gt;
* msg[6] - value of the second asked attribute&lt;br /&gt;
* ...&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_wait&amp;diff=4531</id>
		<title>Send wait</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_wait&amp;diff=4531"/>
				<updated>2012-03-01T15:21:57Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Available methods */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This is the most tricky function and it is the main reason of difficulty of reading [[Spel_Reference_Guide|SPELL code]]. It is used for calling methods on objects. On every SD object (ie. cr, chg, alg...) are defined methods and using ''send_wait'' function you can call them. Definitions of some of them are in *.maj files in [[$NX_ROOT]]/bopcfg/majic folder.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
void send_wait (int timeout, object top_object, string method, [ var parameters… ])&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (in seconds) should the method wait for finishing the method (0 means infinite). A timeout mean time after which the function is considering as failure, returning to caller with error and no result. Nearly every time the 0 is used.&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* method - name of the called method&lt;br /&gt;
* parameters - variable number of parameters based on the called method&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Function doesn't return value, but methods usually fill global '''msg''' array with return values. What values are on what positions depends on the called method.&lt;br /&gt;
&lt;br /&gt;
== Available methods ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined on current (TOP) object&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|These methods are defined on all objects (maybe)&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[attrs_by_index|attrs_by_index]]&lt;br /&gt;
*[[Send_WaitCall_Attr|call_attr]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_attr_vals]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitGet_Co_group|get_co_group]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined on CR object&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitAuto_assign|auto_assign]]&lt;br /&gt;
*[[Send_WaitChange_status|change_status]]&lt;br /&gt;
*[[Send_WaitClose_call_request|close_call_request]]&lt;br /&gt;
*[[Send_WaitCopy_cr|copy_cr]]&lt;br /&gt;
*[[Send_WaitCopy_cr_site|copy_cr_site]]&lt;br /&gt;
*[[Send_WaitCob_mark_delete|dob_mark_delete]]&lt;br /&gt;
*[[Send_WaitCo_expand|do_expand]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitEscalate|escalate]]&lt;br /&gt;
*[[Send_WaitIinit_activity|init_activity]]&lt;br /&gt;
*[[Send_WaitInit_call_request|init_call_request]]&lt;br /&gt;
*[[Send_WaitLog_callback|log_callback]]&lt;br /&gt;
*[[Send_WaitLog_comment|log_comment]]&lt;br /&gt;
*[[Send_WaitLog_comment_no_checkout|log_comment_no_checkout]]&lt;br /&gt;
*[[Send_WaitLog_event|log_event]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitLog_research|log_research]]&lt;br /&gt;
*[[Send_WaitMake_from_template|make_from_template]]&lt;br /&gt;
*[[Send_WaitMake_from_template_site|make_from_template_site]]&lt;br /&gt;
*[[Send_WaitManual_notify|manual_notify]]&lt;br /&gt;
*[[Send_WaitReopen_call_request|reopen_call_request]]&lt;br /&gt;
*[[Send_WaitSend_api_msg|send_api_msg]]&lt;br /&gt;
*[[Send_WaitTransfer|transfer]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined on CHG object&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitAccumulate|accumulate]]&lt;br /&gt;
*[[Send_WaitAccumulate_change|accumulate_change]]&lt;br /&gt;
*[[Send_WaitAccumulate_workflows|accumulate_workflows]]&lt;br /&gt;
*[[Send_WaitAdd_assets|add_assets]]&lt;br /&gt;
*[[Send_WaitAdd_auditlog|add_auditlog]]&lt;br /&gt;
*[[Send_WaitAuto_assign|auto_assign]]&lt;br /&gt;
*[[Send_WaitChange_status|change_status]]&lt;br /&gt;
*[[Send_WaitClose_change_descedents|close_change_descendents]]&lt;br /&gt;
*[[Send_WaitClose_change_request|close_change_request]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCopy_chg|copy_chg]]&lt;br /&gt;
*[[Send_WaitCopy_chg_site|copy_chg_site]]&lt;br /&gt;
*[[Send_WaitDo_expand|do_expand]]&lt;br /&gt;
*[[Send_WaitDob_mark_delete|dob_mark_delete]]&lt;br /&gt;
*[[Send_WaitEscalate|escalate]]&lt;br /&gt;
*[[Send_WaitFast_track|fast_track]]&lt;br /&gt;
*[[Send_WaitImpact_analysis|impact_analysis]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitInit_activity|init_activity]]&lt;br /&gt;
*[[Send_WaitInit_change_request|init_change_request]]&lt;br /&gt;
*[[Send_WaitLog_event|log_event]]&lt;br /&gt;
*[[Send_WaitMake_from_template|make_from_template ]]&lt;br /&gt;
*[[Send_WaitMake_from_template_site|make_from_template_site ]]&lt;br /&gt;
*[[Send_WaitManual_notify|manual_notify]]&lt;br /&gt;
*[[Send_WaitOk_close_descedents|ok_close_descendents]]&lt;br /&gt;
*[[Send_WaitRemove_all_assets|remove_all_assets]]&lt;br /&gt;
*[[Send_WaitTransfer|transfer]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4530</id>
		<title>Send WaitCall Attr</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4530"/>
				<updated>2012-03-01T15:20:18Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: Undo revision 4528 by Kowy (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This is some kind of global method (callable on TOP object). It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
Using this method you can call some actions on object attributes or on other factories. So we can distinguish between usage of this method on '''current object's attributes''' and '''other factories'''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
When calling action on some of top_object's attribute:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string attr_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
or when calling action on some distinct factory:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, string method_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called&lt;br /&gt;
* action/method - name of the called action/method&lt;br /&gt;
* parameters - variable number of parameters based on the called action&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Methods usually fill global '''msg''' array with return values. What values are on what positions depends on the called action.&lt;br /&gt;
&lt;br /&gt;
== Available method/actions ==&lt;br /&gt;
=== Defined on Object attributes ===&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Object attributes&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_dob Spell method|get_dob]]&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_val Spell method|get_val]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[set_val Spell method|set_val]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Defined on factories ===&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined for all factories&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrDob_attr_list|dob_attr_list]]&lt;br /&gt;
*[[dob_attr_type_info|dob_attr_type_info]]&lt;br /&gt;
*[[dob_by_persid|dob_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_domset]]&lt;br /&gt;
*[[get_new_dob]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrNew_attached_event|new_attached_event]]&lt;br /&gt;
*[[Send_WaitCall_attrSync_fetch|sync_fetch]]&lt;br /&gt;
*[[val_by_key]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined on CNT factory&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrCurrent_user_id|current_user_id]]&lt;br /&gt;
*[[Send_WaitCall_attrGet_groups_by_persid|get_groups_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[cnt.get_members_to_notify_by_persid|get_members_to_notify_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrNotify_list|notify_list]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Get currently logged in user&lt;br /&gt;
uuid login_userid&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cr&amp;quot;, &amp;quot;current_user_id&amp;quot;);&lt;br /&gt;
login_userid = msg[0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Attrs_by_index&amp;diff=4529</id>
		<title>Attrs by index</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Attrs_by_index&amp;diff=4529"/>
				<updated>2012-03-01T15:17:29Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: attrs_by_index&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method can be used to fetch attributes from a recordset just returned from [[Send_WaitCall_attrSync_fetch|sync_fetch]] and it should be faster then [[dob_by_index|dob_by_index]] method, because it doesn't need to create full dob in memory, but only specified attributes. It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object recordset, &amp;quot;attrs_by_index&amp;quot;, int start_index, int end_index, &amp;quot;DEFAULT&amp;quot;, int attrs_num [, var attrs])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''timeout'' - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* ''recordset'' - object returned from [[Send_WaitCall_attrSync_fetch|sync_fetch]] method&lt;br /&gt;
* ''start_index'' - from which index do you want to iterate? Must by between 0 and item_count-1&lt;br /&gt;
* ''end_index'' - to which index do you want to iterate? Must by between 0 and item_count-1&lt;br /&gt;
* ''attrs_num'' - number of following  attributes&lt;br /&gt;
* ''attributes'' - each attribute of fetched object you want to return should be passed its name as a string here&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
On success the resulted list is filled into a global array '''msg''' as follows:&lt;br /&gt;
* msg[0] - SD system attribute used for enumeration (NEXT or EOF can be here)&lt;br /&gt;
* msg[1] - item Persistent ID&lt;br /&gt;
* msg[2] - empty?&lt;br /&gt;
* msg[3] - index in the recordset&lt;br /&gt;
* msg[4] - number of returned attributes (should be same as attrs_num)&lt;br /&gt;
* msg[5] - value of the first asked attribute&lt;br /&gt;
* msg[6] - value of the second asked attribute&lt;br /&gt;
* ...&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4528</id>
		<title>Send WaitCall Attr</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4528"/>
				<updated>2012-03-01T14:34:04Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Defined on factories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This is some kind of global method (callable on TOP object). It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
Using this method you can call some actions on object attributes or on other factories. So we can distinguish between usage of this method on '''current object's attributes''' and '''other factories'''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
When calling action on some of top_object's attribute:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string attr_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
or when calling action on some distinct factory:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, string method_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called&lt;br /&gt;
* action/method - name of the called action/method&lt;br /&gt;
* parameters - variable number of parameters based on the called action&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Methods usually fill global '''msg''' array with return values. What values are on what positions depends on the called action.&lt;br /&gt;
&lt;br /&gt;
== Available method/actions ==&lt;br /&gt;
=== Defined on Object attributes ===&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Object attributes&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_dob Spell method|get_dob]]&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_val Spell method|get_val]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[set_val Spell method|set_val]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Defined on factories ===&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined for all factories&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[attrs_by_index|attrs_by_index]]&lt;br /&gt;
*[[Send_WaitCall_attrDob_attr_list|dob_attr_list]]&lt;br /&gt;
*[[dob_attr_type_info|dob_attr_type_info]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[dob_by_persid|dob_by_persid]]&lt;br /&gt;
*[[get_domset]]&lt;br /&gt;
*[[get_new_dob]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrNew_attached_event|new_attached_event]]&lt;br /&gt;
*[[Send_WaitCall_attrSync_fetch|sync_fetch]]&lt;br /&gt;
*[[val_by_key]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined on CNT factory&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrCurrent_user_id|current_user_id]]&lt;br /&gt;
*[[Send_WaitCall_attrGet_groups_by_persid|get_groups_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[cnt.get_members_to_notify_by_persid|get_members_to_notify_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrNotify_list|notify_list]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Get currently logged in user&lt;br /&gt;
uuid login_userid&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cr&amp;quot;, &amp;quot;current_user_id&amp;quot;);&lt;br /&gt;
login_userid = msg[0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Dob_attr_type_info&amp;diff=4386</id>
		<title>Dob attr type info</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Dob_attr_type_info&amp;diff=4386"/>
				<updated>2011-10-25T13:34:45Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Type = LREL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method metadata information about one attribute on a factory. It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, &amp;quot;dob_attr_type_info&amp;quot;, string attribute_name)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''timeout'' - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* ''top_object'' - root object for the method (on which the method is called)&lt;br /&gt;
* ''factory_name'' - a factory containing the attribute (could be anything like pcat, cnt, cr, alg, ...)&lt;br /&gt;
* ''attr_name'' - a name of an attribute that we are looking for&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
On success the resulted list is filled into a global array '''msg'''. Content of the array depends on an attribute type:&lt;br /&gt;
==== Type = VALUE ====&lt;br /&gt;
* msg[0] = attribute name&lt;br /&gt;
* msg[1] = &amp;quot;VALUE&amp;quot;&lt;br /&gt;
* msg[2] = exact attribute datatype&lt;br /&gt;
** 0 = INTEGER&lt;br /&gt;
** 1 = DOUBLE&lt;br /&gt;
** 2 = STRING&lt;br /&gt;
** 6 = LOCAL_TIME&lt;br /&gt;
** 7 = DATE&lt;br /&gt;
** 8 = DURATION&lt;br /&gt;
** 9 = UUID&lt;br /&gt;
* msg[3] = string length in characters if msg[2] == 2&lt;br /&gt;
* msg[4] = Private/Public&lt;br /&gt;
* msg[5] = Required/Non-Required&lt;br /&gt;
* msg[6] = display name&lt;br /&gt;
* msg[7] = UI_INFO&lt;br /&gt;
==== Type = SREL ====&lt;br /&gt;
* msg[0] = attribute name&lt;br /&gt;
* msg[1] = &amp;quot;SREL&amp;quot;&lt;br /&gt;
* msg[2] = foreign factory name&lt;br /&gt;
* msg[3] = relation attribute of a foreign factory&lt;br /&gt;
* msg[4] = Private/Public&lt;br /&gt;
* msg[5] = Required/Non-Required&lt;br /&gt;
* msg[6] = display name&lt;br /&gt;
* msg[7] = ???&lt;br /&gt;
* msg[8] = UI_INFO&lt;br /&gt;
==== Type = BREL/QREL ====&lt;br /&gt;
* msg[0] = attribute name&lt;br /&gt;
* msg[1] = &amp;quot;QREL&amp;quot;&lt;br /&gt;
* msg[2] = foreign factory name&lt;br /&gt;
* msg[3] = WHERE query for QREL relations&lt;br /&gt;
* msg[4] = list of attributes used as parameters to WHERE query in msg[3]&lt;br /&gt;
* msg[5] = DOMSET name&lt;br /&gt;
* msg[6] = sorting definition&lt;br /&gt;
* msg[7] = list columns&lt;br /&gt;
* msg[8] = attribute name&lt;br /&gt;
* msg[9] = foreign attribute name for BREL relations&lt;br /&gt;
* msg[10] = UI_INFO&lt;br /&gt;
==== Type = LREL ====&lt;br /&gt;
* msg[0] = attribute name&lt;br /&gt;
* msg[1] = &amp;quot;LREL&amp;quot;&lt;br /&gt;
* msg[2] = name of intermediate relation factory (table)&lt;br /&gt;
* msg[3] = factory handler?&lt;br /&gt;
* msg[4] = attribute name&lt;br /&gt;
* msg[5] = UI_INFO&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
int i, num_args;&lt;br /&gt;
send_wait( 0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cnt&amp;quot;, &amp;quot;dob_attr_type_info&amp;quot;, &amp;quot;last_name&amp;quot;);&lt;br /&gt;
if ( msg_error()) {&lt;br /&gt;
    printf(&amp;quot;Error: Can't get attributes info: %s\n&amp;quot;, msg[0]);&lt;br /&gt;
    type = &amp;quot;VALUE&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
num_args = msg_length();&lt;br /&gt;
logf(SIGNIFICANT, &amp;quot;num_args = %s&amp;quot;, num_args);&lt;br /&gt;
for (i=0; i&amp;lt;num_args; i++)&lt;br /&gt;
    logf(SIGNIFICANT, &amp;quot;msg[%s] = %s&amp;quot;, i, msg[i]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Dob_attr_type_info&amp;diff=4374</id>
		<title>Dob attr type info</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Dob_attr_type_info&amp;diff=4374"/>
				<updated>2011-10-21T14:17:16Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r12 Category:Spell Code {{Global Header}} {{Global Announcement}} == Overview == This method metadata information about one attribute...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method metadata information about one attribute on a factory. It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, &amp;quot;dob_attr_type_info&amp;quot;, string attribute_name)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''timeout'' - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* ''top_object'' - root object for the method (on which the method is called)&lt;br /&gt;
* ''factory_name'' - a factory containing the attribute (could be anything like pcat, cnt, cr, alg, ...)&lt;br /&gt;
* ''attr_name'' - a name of an attribute that we are looking for&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
On success the resulted list is filled into a global array '''msg'''. Content of the array depends on an attribute type:&lt;br /&gt;
==== Type = VALUE ====&lt;br /&gt;
* msg[0] = attribute name&lt;br /&gt;
* msg[1] = &amp;quot;VALUE&amp;quot;&lt;br /&gt;
* msg[2] = exact attribute datatype&lt;br /&gt;
** 0 = INTEGER&lt;br /&gt;
** 1 = DOUBLE&lt;br /&gt;
** 2 = STRING&lt;br /&gt;
** 6 = LOCAL_TIME&lt;br /&gt;
** 7 = DATE&lt;br /&gt;
** 8 = DURATION&lt;br /&gt;
** 9 = UUID&lt;br /&gt;
* msg[3] = string length in characters if msg[2] == 2&lt;br /&gt;
* msg[4] = Private/Public&lt;br /&gt;
* msg[5] = Required/Non-Required&lt;br /&gt;
* msg[6] = display name&lt;br /&gt;
* msg[7] = UI_INFO&lt;br /&gt;
==== Type = SREL ====&lt;br /&gt;
* msg[0] = attribute name&lt;br /&gt;
* msg[1] = &amp;quot;SREL&amp;quot;&lt;br /&gt;
* msg[2] = foreign factory name&lt;br /&gt;
* msg[3] = relation attribute of a foreign factory&lt;br /&gt;
* msg[4] = Private/Public&lt;br /&gt;
* msg[5] = Required/Non-Required&lt;br /&gt;
* msg[6] = display name&lt;br /&gt;
* msg[7] = ???&lt;br /&gt;
* msg[8] = UI_INFO&lt;br /&gt;
==== Type = BREL/QREL ====&lt;br /&gt;
* msg[0] = attribute name&lt;br /&gt;
* msg[1] = &amp;quot;QREL&amp;quot;&lt;br /&gt;
* msg[2] = foreign factory name&lt;br /&gt;
* msg[3] = WHERE query for QREL relations&lt;br /&gt;
* msg[4] = list of attributes used as parameters to WHERE query in msg[3]&lt;br /&gt;
* msg[5] = DOMSET name&lt;br /&gt;
* msg[6] = sorting definition&lt;br /&gt;
* msg[7] = list columns&lt;br /&gt;
* msg[8] = attribute name&lt;br /&gt;
* msg[9] = foreign attribute name for BREL relations&lt;br /&gt;
* msg[10] = UI_INFO&lt;br /&gt;
==== Type = LREL ====&lt;br /&gt;
* msg[0] = attribute name&lt;br /&gt;
* msg[1] = &amp;quot;QREL&amp;quot;&lt;br /&gt;
* msg[2] = name of intermediate relation factory (table)&lt;br /&gt;
* msg[3] = factory handler?&lt;br /&gt;
* msg[4] = attribute name&lt;br /&gt;
* msg[5] = UI_INFO&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
int i, num_args;&lt;br /&gt;
send_wait( 0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cnt&amp;quot;, &amp;quot;dob_attr_type_info&amp;quot;, &amp;quot;last_name&amp;quot;);&lt;br /&gt;
if ( msg_error()) {&lt;br /&gt;
    printf(&amp;quot;Error: Can't get attributes info: %s\n&amp;quot;, msg[0]);&lt;br /&gt;
    type = &amp;quot;VALUE&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
num_args = msg_length();&lt;br /&gt;
logf(SIGNIFICANT, &amp;quot;num_args = %s&amp;quot;, num_args);&lt;br /&gt;
for (i=0; i&amp;lt;num_args; i++)&lt;br /&gt;
    logf(SIGNIFICANT, &amp;quot;msg[%s] = %s&amp;quot;, i, msg[i]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4373</id>
		<title>Send WaitCall Attr</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4373"/>
				<updated>2011-10-21T13:44:50Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This is some kind of global method (callable on TOP object). It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
Using this method you can call some actions on object attributes or on other factories. So we can distinguish between usage of this method on '''current object's attributes''' and '''other factories'''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
When calling action on some of top_object's attribute:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string attr_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
or when calling action on some distinct factory:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, string method_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called&lt;br /&gt;
* action/method - name of the called action/method&lt;br /&gt;
* parameters - variable number of parameters based on the called action&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Methods usually fill global '''msg''' array with return values. What values are on what positions depends on the called action.&lt;br /&gt;
&lt;br /&gt;
== Available method/actions ==&lt;br /&gt;
=== Defined on Object attributes ===&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Object attributes&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_dob Spell method|get_dob]]&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_val Spell method|get_val]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[set_val Spell method|set_val]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Defined on factories ===&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined for all factories&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrDob_attr_list|dob_attr_list]]&lt;br /&gt;
*[[dob_attr_type_info|dob_attr_type_info]]&lt;br /&gt;
*[[dob_by_persid|dob_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_domset]]&lt;br /&gt;
*[[get_new_dob]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrNew_attached_event|new_attached_event]]&lt;br /&gt;
*[[Send_WaitCall_attrSync_fetch|sync_fetch]]&lt;br /&gt;
*[[val_by_key]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined on CNT factory&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrCurrent_user_id|current_user_id]]&lt;br /&gt;
*[[Send_WaitCall_attrGet_groups_by_persid|get_groups_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[cnt.get_members_to_notify_by_persid|get_members_to_notify_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrNotify_list|notify_list]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Get currently logged in user&lt;br /&gt;
uuid login_userid&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cr&amp;quot;, &amp;quot;current_user_id&amp;quot;);&lt;br /&gt;
login_userid = msg[0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Cnt.get_members_to_notify_by_persid&amp;diff=4346</id>
		<title>Cnt.get members to notify by persid</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Cnt.get_members_to_notify_by_persid&amp;diff=4346"/>
				<updated>2011-07-19T14:35:07Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r11 Category:r12 Category:Spell Code {{Global Header}} {{Global Announcement}} == Overview == This method gets a list of members ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method gets a list of members with Notify flag set ON for specified group .&lt;br /&gt;
&lt;br /&gt;
This action can be called in [[Spel_Reference_Guide|spell code]] in method [[send_wait]] (or [[send]]) using [[Send_WaitCall_Attr|call_attr]] action.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, &amp;quot;cnt&amp;quot;, &amp;quot;get_members_to_notify_by_persid&amp;quot;, contact_persid)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (in seconds) should the method wait for finishing the method (0 means infinite [no timeout] and is generally the value used)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* contact_persid - persistent ID of a group for which members you are looking for&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
success or failure is tested with msg_error() (boolean function)&lt;br /&gt;
&lt;br /&gt;
On success the resulted list is filled into a global array '''msg''' as follows:&lt;br /&gt;
* msg[0] - the number of assigned groups&lt;br /&gt;
* msg[1] - one string with a list of member persistent IDs separated by spaces (&amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
On failure&lt;br /&gt;
* msg[0] - failure reason&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
int i;&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cnt&amp;quot;, &amp;quot;get_members_to_notify_by_persid&amp;quot;, &amp;quot;cnt:776B094702EABB4B87F04A139E72D44B&amp;quot;);&lt;br /&gt;
if( msg_error()) {&lt;br /&gt;
    logf (ERROR, &amp;quot;failure in send_wait ..... .Reason: %s&amp;quot;,msg[0]);&lt;br /&gt;
} else {&lt;br /&gt;
    string member_persids[msg[0]];&lt;br /&gt;
    split(member_persids, msg[1], &amp;quot; &amp;quot;);&lt;br /&gt;
    for (i=0;i&amp;lt;msg[0];i++) {&lt;br /&gt;
        logf (SIGNIFICANT, &amp;quot;Notify %s&amp;quot;, member_persids[i]);&lt;br /&gt;
    }&lt;br /&gt;
}&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;
string notify_list;&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cnt&amp;quot;, &amp;quot;get_members_to_notify_by_persid&amp;quot;, msg_target);&lt;br /&gt;
if (msg_error()) {&lt;br /&gt;
    logf(ERROR, &amp;quot;%s: Error in get_members_to_notify_by_persid(%s)&amp;quot;, method, msg_target);&lt;br /&gt;
    return 1;&lt;br /&gt;
} else {&lt;br /&gt;
    notify_list = msg[1] + &amp;quot; &amp;quot; + msg_target;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
logf(TRACE, &amp;quot;%s: Going to notify these users: %s&amp;quot;, method, notify_list);&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cnt&amp;quot;, &amp;quot;notify_list&amp;quot;, notify_list, msg_level, msg_title, msg_body, &amp;quot;&amp;quot; /* msg_ack */, &lt;br /&gt;
          tran_pt, ticket, is_internal, 0 /* cmth_override */);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4345</id>
		<title>Send WaitCall Attr</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4345"/>
				<updated>2011-07-19T12:50:29Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This is some kind of global method (callable on TOP object). It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
Using this method you can call some actions on object attributes or on other factories. So we can distinguish between usage of this method on '''current object's attributes''' and '''other factories'''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
When calling action on some of top_object's attribute:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string attr_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
or when calling action on some distinct factory:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, string method_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called&lt;br /&gt;
* action/method - name of the called action/method&lt;br /&gt;
* parameters - variable number of parameters based on the called action&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Methods usually fill global '''msg''' array with return values. What values are on what positions depends on the called action.&lt;br /&gt;
&lt;br /&gt;
== Available method/actions ==&lt;br /&gt;
=== Defined on Object attributes ===&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Object attributes&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_dob Spell method|get_dob]]&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_val Spell method|get_val]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[set_val Spell method|set_val]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Defined on factories ===&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined for all factories&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrDob_attr_list|dob_attr_list]]&lt;br /&gt;
*[[dob_by_persid|dob_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_domset]]&lt;br /&gt;
*[[get_new_dob]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrNew_attached_event|new_attached_event]]&lt;br /&gt;
*[[Send_WaitCall_attrSync_fetch|sync_fetch]]&lt;br /&gt;
*[[val_by_key]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined on CNT factory&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrCurrent_user_id|current_user_id]]&lt;br /&gt;
*[[Send_WaitCall_attrGet_groups_by_persid|get_groups_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[cnt.get_members_to_notify_by_persid|get_members_to_notify_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrNotify_list|notify_list]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Get currently logged in user&lt;br /&gt;
uuid login_userid&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cr&amp;quot;, &amp;quot;current_user_id&amp;quot;);&lt;br /&gt;
login_userid = msg[0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4344</id>
		<title>Send WaitCall Attr</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4344"/>
				<updated>2011-07-19T12:48:25Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Available actions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This is some kind of global method (callable on TOP object). It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
Using this method you can call some actions on object attributes or on other factories. So we can distinguish between usage of this method on '''current object's attributes''' and '''other factories'''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
When calling action on some of top_object's attribute:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string attr_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
or when calling action on some distinct factory:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called&lt;br /&gt;
* action - name of the called action&lt;br /&gt;
* parameters - variable number of parameters based on the called action&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Methods usually fill global '''msg''' array with return values. What values are on what positions depends on the called action.&lt;br /&gt;
&lt;br /&gt;
== Available method/actions ==&lt;br /&gt;
=== Defined on Object attributes ===&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Object attributes&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_dob Spell method|get_dob]]&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_val Spell method|get_val]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[set_val Spell method|set_val]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Defined on factories ===&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined for all factories&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrDob_attr_list|dob_attr_list]]&lt;br /&gt;
*[[dob_by_persid|dob_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_domset]]&lt;br /&gt;
*[[get_new_dob]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrNew_attached_event|new_attached_event]]&lt;br /&gt;
*[[Send_WaitCall_attrSync_fetch|sync_fetch]]&lt;br /&gt;
*[[val_by_key]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined on CNT factory&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrCurrent_user_id|current_user_id]]&lt;br /&gt;
*[[Send_WaitCall_attrGet_groups_by_persid|get_groups_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[cnt.get_members_to_notify_by_persid|get_members_to_notify_by_persid]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_attrNotify_list|notify_list]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Get currently logged in user&lt;br /&gt;
uuid login_userid&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cr&amp;quot;, &amp;quot;current_user_id&amp;quot;);&lt;br /&gt;
login_userid = msg[0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_wait&amp;diff=4343</id>
		<title>Send wait</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_wait&amp;diff=4343"/>
				<updated>2011-07-19T12:46:29Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Available methods */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This is the most tricky function and it is the main reason of difficulty of reading [[Spel_Reference_Guide|SPELL code]]. It is used for calling methods on objects. On every SD object (ie. cr, chg, alg...) are defined methods and using ''send_wait'' function you can call them. Definitions of some of them are in *.maj files in [[$NX_ROOT]]/bopcfg/majic folder.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
void send_wait (int timeout, object top_object, string method, [ var parameters… ])&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (in seconds) should the method wait for finishing the method (0 means infinite). A timeout mean time after which the function is considering as failure, returning to caller with error and no result. Nearly every time the 0 is used.&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* method - name of the called method&lt;br /&gt;
* parameters - variable number of parameters based on the called method&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Function doesn't return value, but methods usually fill global '''msg''' array with return values. What values are on what positions depends on the called method.&lt;br /&gt;
&lt;br /&gt;
== Available methods ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined on current (TOP) object&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|These methods are defined on all objects (maybe)&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCall_Attr|call_attr]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_attr_vals]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitGet_Co_group|get_co_group]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined on CR object&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitAuto_assign|auto_assign]]&lt;br /&gt;
*[[Send_WaitChange_status|change_status]]&lt;br /&gt;
*[[Send_WaitClose_call_request|close_call_request]]&lt;br /&gt;
*[[Send_WaitCopy_cr|copy_cr]]&lt;br /&gt;
*[[Send_WaitCopy_cr_site|copy_cr_site]]&lt;br /&gt;
*[[Send_WaitCob_mark_delete|dob_mark_delete]]&lt;br /&gt;
*[[Send_WaitCo_expand|do_expand]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitEscalate|escalate]]&lt;br /&gt;
*[[Send_WaitIinit_activity|init_activity]]&lt;br /&gt;
*[[Send_WaitInit_call_request|init_call_request]]&lt;br /&gt;
*[[Send_WaitLog_callback|log_callback]]&lt;br /&gt;
*[[Send_WaitLog_comment|log_comment]]&lt;br /&gt;
*[[Send_WaitLog_comment_no_checkout|log_comment_no_checkout]]&lt;br /&gt;
*[[Send_WaitLog_event|log_event]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitLog_research|log_research]]&lt;br /&gt;
*[[Send_WaitMake_from_template|make_from_template]]&lt;br /&gt;
*[[Send_WaitMake_from_template_site|make_from_template_site]]&lt;br /&gt;
*[[Send_WaitManual_notify|manual_notify]]&lt;br /&gt;
*[[Send_WaitReopen_call_request|reopen_call_request]]&lt;br /&gt;
*[[Send_WaitSend_api_msg|send_api_msg]]&lt;br /&gt;
*[[Send_WaitTransfer|transfer]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Defined on CHG object&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitAccumulate|accumulate]]&lt;br /&gt;
*[[Send_WaitAccumulate_change|accumulate_change]]&lt;br /&gt;
*[[Send_WaitAccumulate_workflows|accumulate_workflows]]&lt;br /&gt;
*[[Send_WaitAdd_assets|add_assets]]&lt;br /&gt;
*[[Send_WaitAdd_auditlog|add_auditlog]]&lt;br /&gt;
*[[Send_WaitAuto_assign|auto_assign]]&lt;br /&gt;
*[[Send_WaitChange_status|change_status]]&lt;br /&gt;
*[[Send_WaitClose_change_descedents|close_change_descendents]]&lt;br /&gt;
*[[Send_WaitClose_change_request|close_change_request]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitCopy_chg|copy_chg]]&lt;br /&gt;
*[[Send_WaitCopy_chg_site|copy_chg_site]]&lt;br /&gt;
*[[Send_WaitDo_expand|do_expand]]&lt;br /&gt;
*[[Send_WaitDob_mark_delete|dob_mark_delete]]&lt;br /&gt;
*[[Send_WaitEscalate|escalate]]&lt;br /&gt;
*[[Send_WaitFast_track|fast_track]]&lt;br /&gt;
*[[Send_WaitImpact_analysis|impact_analysis]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Send_WaitInit_activity|init_activity]]&lt;br /&gt;
*[[Send_WaitInit_change_request|init_change_request]]&lt;br /&gt;
*[[Send_WaitLog_event|log_event]]&lt;br /&gt;
*[[Send_WaitMake_from_template|make_from_template ]]&lt;br /&gt;
*[[Send_WaitMake_from_template_site|make_from_template_site ]]&lt;br /&gt;
*[[Send_WaitManual_notify|manual_notify]]&lt;br /&gt;
*[[Send_WaitOk_close_descedents|ok_close_descendents]]&lt;br /&gt;
*[[Send_WaitRemove_all_assets|remove_all_assets]]&lt;br /&gt;
*[[Send_WaitTransfer|transfer]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4342</id>
		<title>Send WaitCall Attr</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4342"/>
				<updated>2011-07-19T12:11:45Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This is some kind of global method (callable on TOP object). It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
Using this method you can call some actions on object attributes or on other factories. So we can distinguish between usage of this method on '''current object's attributes''' and '''other factories'''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
When calling action on some of top_object's attribute:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string attr_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
or when calling action on some distinct factory:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called&lt;br /&gt;
* action - name of the called action&lt;br /&gt;
* parameters - variable number of parameters based on the called action&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Methods usually fill global '''msg''' array with return values. What values are on what positions depends on the called action.&lt;br /&gt;
&lt;br /&gt;
== Available actions ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Object's attributes&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_dob Spell method|get_dob]]&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_val Spell method|get_val]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[set_val Spell method|set_val]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Other factories&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrCurrent_user_id|current_user_id]]&lt;br /&gt;
*[[send_WaitCall_attrDob_attr_list|dob_attr_list]]&lt;br /&gt;
*[[send_WaitCall_attrDob_by_persid|dob_by_persid]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrGet_domset|get_domset]]&lt;br /&gt;
*[[send_WaitCall_attrGet_groups_by_persid|get_groups_by_persid]]&lt;br /&gt;
*[[send_WaitCall_attrGet_new_dob|get_new_dob]]&lt;br /&gt;
*[[send_WaitCall_attrNew_attached_event|new_attached_event]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrNotify_list|notify_list]]&lt;br /&gt;
*[[send_WaitCall_attrSync_fetch|sync_fetch]]&lt;br /&gt;
*[[send_WaitCall_attrVal_by_key|val_by_key]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Get currently logged in user&lt;br /&gt;
uuid login_userid&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cr&amp;quot;, &amp;quot;current_user_id&amp;quot;);&lt;br /&gt;
login_userid = msg[0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Get_dob_Spell_method&amp;diff=4332</id>
		<title>Get dob Spell method</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Get_dob_Spell_method&amp;diff=4332"/>
				<updated>2011-06-03T14:16:48Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r6 Category:r11 Category:r12 Category:Spell Code {{Global Header}} {{Global Announcement}} == Overview == This method loads f...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method loads from database an object connected over SREL relation to an another object and return it as full DOB object.&lt;br /&gt;
&lt;br /&gt;
This action can be called in [[Spel_Reference_Guide|spell code]] in method [[send_wait]] for [[Send_WaitCall_Attr|call_attr]].&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string attr_name, &amp;quot;get_dob&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - object where the attribute is placed&lt;br /&gt;
* attr_name - name of SREL attribute&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
On success attribute DOB object is in the first position of global array '''msg'''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
object retval;&lt;br /&gt;
retval = msg[0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Part of code to read request Affected End User&lt;br /&gt;
send_wait(0, this, &amp;quot;call_attr&amp;quot;, &amp;quot;customer&amp;quot;, &amp;quot;get_dob&amp;quot;);&lt;br /&gt;
if (msg_error()) {&lt;br /&gt;
    logf(ERROR, &amp;quot;%s: error in get_dob(customer): %s&amp;quot;, method, msg[0]);&lt;br /&gt;
    return;&lt;br /&gt;
}&lt;br /&gt;
object aff_eu;&lt;br /&gt;
aff_eu = msg[0];&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Get_val_Spell_method&amp;diff=4331</id>
		<title>Get val Spell method</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Get_val_Spell_method&amp;diff=4331"/>
				<updated>2011-06-03T12:35:51Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r6 Category:r11 Category:r12 Category:Spell Code {{Global Header}} {{Global Announcement}} == Overview == This method gets va...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method gets value of some single (not REL) attribute and returns it. It also preserves datatype of column. It is suitable for accessing attributes with reserved name (bool, function, class...), n-th item of multivalue (group.member_list.0.combo_name) or dynamic reading, where attribute name is in variable.&lt;br /&gt;
&lt;br /&gt;
This action can be called in [[Spel_Reference_Guide|spell code]] in method [[send_wait]] for [[Send_WaitCall_Attr|call_attr]].&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string attr_name, &amp;quot;get_val&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - object where the attribute is placed&lt;br /&gt;
* attr_name - name of attribute which value should be get&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
On success attribute value is in the first position of global array '''msg'''.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
retval = msg[0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Part of code to read group members&lt;br /&gt;
for( iLoop = 0; iLoop &amp;lt; member_count; iLoop++ ) {&lt;br /&gt;
    send_wait(0, some_group, &amp;quot;call_attr&amp;quot;, format(&amp;quot;member_list.%d.combo_name&amp;quot;,iLoop), &amp;quot;get_val&amp;quot;);&lt;br /&gt;
    if (msg_error()) {&lt;br /&gt;
        logf(ERROR, &amp;quot;%s: error in get_val: %s&amp;quot;, method, msg[0]);&lt;br /&gt;
        continue;&lt;br /&gt;
    }&lt;br /&gt;
    member_name = msg[0];&lt;br /&gt;
    ....&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4330</id>
		<title>Send WaitCall Attr</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4330"/>
				<updated>2011-06-03T10:19:49Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Available actions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This is some kind of global method (callable on all objects). It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
Using this method you can call some actions on object's attributes or on other factories. So we can distinguis between usage of this method on '''object's attributes''' and '''other factories'''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
When calling action on some of top_object's attribute:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string attr_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
or when calling action on some distinct factory:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called&lt;br /&gt;
* action - name of the called action&lt;br /&gt;
* parameters - variable number of parameters based on the called action&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Methods usually fill global '''msg''' array with return values. What values are on what positions depends on the called action.&lt;br /&gt;
&lt;br /&gt;
== Available actions ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Object's attributes&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_dob Spell method|get_dob]]&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[get_val Spell method|get_val]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[set_val Spell method|set_val]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Other factories&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrCurrent_user_id|current_user_id]]&lt;br /&gt;
*[[send_WaitCall_attrDob_attr_list|dob_attr_list]]&lt;br /&gt;
*[[send_WaitCall_attrDob_by_persid|dob_by_persid]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrGet_domset|get_domset]]&lt;br /&gt;
*[[send_WaitCall_attrGet_groups_by_persid|get_groups_by_persid]]&lt;br /&gt;
*[[send_WaitCall_attrGet_new_dob|get_new_dob]]&lt;br /&gt;
*[[send_WaitCall_attrNew_attached_event|new_attached_event]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrNotify_list|notify_list]]&lt;br /&gt;
*[[send_WaitCall_attrSync_fetch|sync_fetch]]&lt;br /&gt;
*[[send_WaitCall_attrVal_by_key|val_by_key]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Get currently logged in user&lt;br /&gt;
uuid login_userid&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cr&amp;quot;, &amp;quot;current_user_id&amp;quot;);&lt;br /&gt;
login_userid = msg[0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4329</id>
		<title>Send WaitCall Attr</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4329"/>
				<updated>2011-06-03T09:18:39Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Available actions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This is some kind of global method (callable on all objects). It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
Using this method you can call some actions on object's attributes or on other factories. So we can distinguis between usage of this method on '''object's attributes''' and '''other factories'''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
When calling action on some of top_object's attribute:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string attr_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
or when calling action on some distinct factory:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called&lt;br /&gt;
* action - name of the called action&lt;br /&gt;
* parameters - variable number of parameters based on the called action&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Methods usually fill global '''msg''' array with return values. What values are on what positions depends on the called action.&lt;br /&gt;
&lt;br /&gt;
== Available actions ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Object's attributes&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrGet_dob|get_dob]]&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrGet_val|get_val]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrSet_val|set_val]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Other factories&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrCurrent_user_id|current_user_id]]&lt;br /&gt;
*[[send_WaitCall_attrDob_attr_list|dob_attr_list]]&lt;br /&gt;
*[[send_WaitCall_attrDob_by_persid|dob_by_persid]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrGet_domset|get_domset]]&lt;br /&gt;
*[[send_WaitCall_attrGet_groups_by_persid|get_groups_by_persid]]&lt;br /&gt;
*[[send_WaitCall_attrGet_new_dob|get_new_dob]]&lt;br /&gt;
*[[send_WaitCall_attrNew_attached_event|new_attached_event]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrNotify_list|notify_list]]&lt;br /&gt;
*[[send_WaitCall_attrSync_fetch|sync_fetch]]&lt;br /&gt;
*[[send_WaitCall_attrVal_by_key|val_by_key]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Get currently logged in user&lt;br /&gt;
uuid login_userid&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cr&amp;quot;, &amp;quot;current_user_id&amp;quot;);&lt;br /&gt;
login_userid = msg[0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Upcase&amp;diff=4328</id>
		<title>Upcase</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Upcase&amp;diff=4328"/>
				<updated>2011-05-16T14:22:18Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r6 Category:r11 Category:r12 Category:Spell Code {{Global Header}} {{Global Announcement}}  == Overview == Spell function con...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Spell function converting string to a uppercase (coverts all characters in string to uppercase)&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
string upcase(string attr);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* attr - any string&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Returns converted string.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
acc_type_name = upcase(acc_type_name);&lt;br /&gt;
if (acc_type_name == 'EMPLOYEE') cnt_type = 2305;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Downcase&amp;diff=4327</id>
		<title>Downcase</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Downcase&amp;diff=4327"/>
				<updated>2011-05-16T13:36:43Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r6 Category:r11 Category:r12 Category:Spell Code {{Global Header}} {{Global Announcement}}  == Overview == Spell function con...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Spell function converting string to a lowercase (coverts all characters in string to lowercase)&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
string downcase(string attr);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* attr - any string&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Returns converted string.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(downcase(option_value) == &amp;quot;yes&amp;quot; ) {&lt;br /&gt;
    option_value=&amp;quot;Yes&amp;quot;;&lt;br /&gt;
} else if (downcase(option_value) == &amp;quot;no&amp;quot;) {&lt;br /&gt;
    option_value=&amp;quot;No&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Spel_Reference_Guide&amp;diff=4326</id>
		<title>Spel Reference Guide</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Spel_Reference_Guide&amp;diff=4326"/>
				<updated>2011-05-16T13:31:35Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Reference Sections */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
Note: please treat SPELL as SPEL &lt;br /&gt;
== Overview ==&lt;br /&gt;
Spell is CA proprietary code used to script Service Desk core operations. Spell code can be found in .spl and .maj files located in [[$NX_ROOT]]\bopcfg\majic and [[$NX_ROOT]]\site\mods\majic directories. Other examples can be found in the [[$NX_ROOT]]\samples directory.&lt;br /&gt;
&lt;br /&gt;
Note: .spl files with a ''pcd'' preceding the .spl are encrypted files, such as chgpcd.spl or itilpcd.spl.&lt;br /&gt;
&lt;br /&gt;
Spell is usually used to write methods for object or attribute triggers.  Examples may be attribute validation, notification, post processing, etc.&lt;br /&gt;
&lt;br /&gt;
Spell is interpreted and executed by the Method Engine (spel_srvr), it can also be executed from the command line with bop_cmd command that interprets the fragment (.frg) files and executes the code.&lt;br /&gt;
&lt;br /&gt;
The language resembles C++.  Unlike C or C++, Spell does not support pointers or structures.&lt;br /&gt;
&lt;br /&gt;
== Reference Sections ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Functions&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[downcase]]&lt;br /&gt;
*[[exec]]&lt;br /&gt;
*[[format]]&lt;br /&gt;
*[[getenv]]&lt;br /&gt;
*[[gsub]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[is_empty]]&lt;br /&gt;
*[[is_null]]&lt;br /&gt;
*[[misc:find_mang]]&lt;br /&gt;
*[[now]]&lt;br /&gt;
*[[send_wait]]&lt;br /&gt;
*[[sindex]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[strlen]]&lt;br /&gt;
*[[substr]]&lt;br /&gt;
*[[upcase]]&lt;br /&gt;
*[[workshift_abs2work]]&lt;br /&gt;
*[[workshift_work2abs]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Statements&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[if]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[for]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[while]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Other&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Data Type Conversion]]&lt;br /&gt;
*[[Operators]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Spel FAQ]]&lt;br /&gt;
*[[Triggering Reaction]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Troubleshooting Spell Code|Troubleshooting]]&lt;br /&gt;
*[[Variables and Types]]&lt;br /&gt;
*[[Methods handling]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
[[WSSIWYG]] by Nero Le Velu&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Data_Type_Conversion&amp;diff=4325</id>
		<title>Data Type Conversion</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Data_Type_Conversion&amp;diff=4325"/>
				<updated>2011-05-16T13:17:38Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
This This article details how to convert from one data type to another in [[Spel Reference Guide|Spel code]]. This concept is regarded as ''casting''.&lt;br /&gt;
&lt;br /&gt;
== Details ==&lt;br /&gt;
Primary data types used in USD spell.&lt;br /&gt;
* string&lt;br /&gt;
* int&lt;br /&gt;
* float&lt;br /&gt;
* date&lt;br /&gt;
* duration&lt;br /&gt;
* bool&lt;br /&gt;
* uuid ''(introduced in r11.x)''&lt;br /&gt;
* object&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;string MyString;&lt;br /&gt;
int MyInt;&lt;br /&gt;
float MyFloat;&lt;br /&gt;
date MyDate;&lt;br /&gt;
duration MyDuration;&lt;br /&gt;
uuid MyUUID;&lt;br /&gt;
&lt;br /&gt;
MyString = &amp;quot;Hello world no: &amp;quot; +(string) 1; // result: &amp;quot;Hello world no: 1&amp;quot;&lt;br /&gt;
MyInt = (int) &amp;quot;2 times&amp;quot;);  // result: 2&lt;br /&gt;
MyFloat = (float)MyInt; // result: 2.00000&lt;br /&gt;
MyDate = (date)( (string) now()); // result: the actual date depending of your system time configuration&lt;br /&gt;
MyDuration = (duration)((int) &amp;quot;2&amp;quot; + 3), // result: duration of 5 sec.&lt;br /&gt;
MyUUID = (uuid)expand( &amp;quot;&amp;amp;{'mylogin'=cnt.userid-&amp;gt;id}&amp;quot;); // result: the id of contact having userid &amp;quot;mylogin&amp;quot;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arrays ==&lt;br /&gt;
In Spell code you can use arrays as well.&lt;br /&gt;
&lt;br /&gt;
Accessing array fields is very similar to other languages, simply use&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
myArray[3]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
to access forth element of an array myArray. Arrays are 0-based.&lt;br /&gt;
&lt;br /&gt;
Here is the example of declarantion of a new array of strings with 4 elements:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;string msgs[4];&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrNotify_list&amp;diff=4324</id>
		<title>Send WaitCall attrNotify list</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrNotify_list&amp;diff=4324"/>
				<updated>2011-05-16T09:47:18Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method sends notifications to a list of concrete recipients.&lt;br /&gt;
&lt;br /&gt;
This action can be called in [[Spel_Reference_Guide|spell code]] in method [[send_wait]] (or [[send]]) using [[Send_WaitCall_Attr|call_attr]] action.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, &amp;quot;notify_list&amp;quot;, &lt;br /&gt;
                string contact_persid, int evt_level, string evt_mtitle, string evt_mbody, string msg_ack, &lt;br /&gt;
                int trans_pt, string parent_object, int is_internal, int cmth_override)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - &amp;quot;cnt&amp;quot; in this case&lt;br /&gt;
* contact_persid - list of space (' ') separated persistent IDs of notified contacts&lt;br /&gt;
* evt_level - notification level (low, normal, high, emergency)&lt;br /&gt;
* evt_mtitle - message subject&lt;br /&gt;
* evtmbody - message body (plain text format)&lt;br /&gt;
* msg_ack -  unknown, but usually empty string: &amp;quot;&amp;quot;&lt;br /&gt;
* trans_pt - unknown, but has these values: 28 - for request; 29 - for change and issue&lt;br /&gt;
* parent_object - peristent ID of a base object (request, change...); this ticket will refer this notification in a Notification log&lt;br /&gt;
* is_internal - probably 0/1; usually 0&lt;br /&gt;
* cmth_override - ID of forced Notification method or 0 if method defined for given contact and evt_level should be used&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
No results.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
string evt_mtitle, evt_mbody;&lt;br /&gt;
evt_mtitle = format(&amp;quot;Change Order %s - '%s' Event Notify Group&amp;quot;, chg_ref_num, event_tmpl.condition.sym);&lt;br /&gt;
evt_mbody = format(&amp;quot;change %s event notification\n&amp;quot;, chg_ref_num);&lt;br /&gt;
evt_mbody += format(&amp;quot;priority: %d\n&amp;quot;, priority.sym);&lt;br /&gt;
evt_mbody += format(&amp;quot;assigned to: %s\n&amp;quot;, assignee.combo_name);&lt;br /&gt;
evt_mbody += format(&amp;quot;requester: %s\n&amp;quot;, requestor.combo_name);&lt;br /&gt;
evt_mbody += format(&amp;quot;description: %s\n&amp;quot;, description);&lt;br /&gt;
&lt;br /&gt;
int evt_level;&lt;br /&gt;
evt_level = 2;&lt;br /&gt;
int trans_pt;&lt;br /&gt;
trans_pt = 29; &lt;br /&gt;
string contact_persid;&lt;br /&gt;
&lt;br /&gt;
if (!is_null(group))&lt;br /&gt;
{&lt;br /&gt;
   contact_persid = misc::find_mang(group);&lt;br /&gt;
   if(!is_empty(contact_persid)) {&lt;br /&gt;
      send(top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cnt&amp;quot;, &amp;quot;notify_list&amp;quot;,&lt;br /&gt;
           contact_persid, evt_level, evt_mtitle, evt_mbody, &amp;quot;&amp;quot;, trans_pt, persistent_id, 0, 0);&lt;br /&gt;
      if (msg_error()) {&lt;br /&gt;
         logf(ERROR, format(&amp;quot;macro event error on notify_list '%s'&amp;quot;, msg[0]));&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrNotify_list&amp;diff=4291</id>
		<title>Send WaitCall attrNotify list</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrNotify_list&amp;diff=4291"/>
				<updated>2011-01-25T07:56:29Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method sends notifications to a list of concrete recipients.&lt;br /&gt;
&lt;br /&gt;
This action can be called in [[Spel_Reference_Guide|spell code]] in method [[send_wait]] (or [[send]]) using [[Send_WaitCall_Attr|call_attr]] action.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, &amp;quot;notify_list&amp;quot;, &lt;br /&gt;
                string contact_persid, int evt_level, string evt_mtitle, string evt_mbody, string msg_ack, &lt;br /&gt;
                int trans_pt, string parent_object, int is_internal, int cmth_override)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called (could be &amp;quot;cr&amp;quot; for requsts and incidents, &amp;quot;chg&amp;quot; for changes, &amp;quot;iss&amp;quot; for issues)&lt;br /&gt;
* contact_persid - list of space (' ') separated persistent IDs of notified contacts&lt;br /&gt;
* evt_level - notification level (low, normal, high, emergency)&lt;br /&gt;
* evt_mtitle - message subject&lt;br /&gt;
* evtmbody - message body (plain text format)&lt;br /&gt;
* msg_ack -  unknown, but usually empty string: &amp;quot;&amp;quot;&lt;br /&gt;
* trans_pt - unknown, but has these values: 28 - for request; 29 - for change and issue&lt;br /&gt;
* parent_object - peristent ID of a base object (request, change...); this ticket will refer this notification in a Notification log&lt;br /&gt;
* is_internal - probably 0/1; usually 0&lt;br /&gt;
* cmth_override - ID of forced Notification method or 0 if method defined for given contact and evt_level should be used&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
No results.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
string evt_mtitle, evt_mbody;&lt;br /&gt;
evt_mtitle = format(&amp;quot;Change Order %s - '%s' Event Notify Group&amp;quot;, chg_ref_num, event_tmpl.condition.sym);&lt;br /&gt;
evt_mbody = format(&amp;quot;change %s event notification\n&amp;quot;, chg_ref_num);&lt;br /&gt;
evt_mbody += format(&amp;quot;priority: %d\n&amp;quot;, priority.sym);&lt;br /&gt;
evt_mbody += format(&amp;quot;assigned to: %s\n&amp;quot;, assignee.combo_name);&lt;br /&gt;
evt_mbody += format(&amp;quot;requester: %s\n&amp;quot;, requestor.combo_name);&lt;br /&gt;
evt_mbody += format(&amp;quot;description: %s\n&amp;quot;, description);&lt;br /&gt;
&lt;br /&gt;
int evt_level;&lt;br /&gt;
evt_level = 2;&lt;br /&gt;
int trans_pt;&lt;br /&gt;
trans_pt = 29; &lt;br /&gt;
string contact_persid;&lt;br /&gt;
&lt;br /&gt;
if (!is_null(group))&lt;br /&gt;
{&lt;br /&gt;
   contact_persid = misc::find_mang(group);&lt;br /&gt;
   if(!is_empty(contact_persid)) {&lt;br /&gt;
      send(top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cnt&amp;quot;, &amp;quot;notify_list&amp;quot;,&lt;br /&gt;
           contact_persid, evt_level, evt_mtitle, evt_mbody, &amp;quot;&amp;quot;, trans_pt, persistent_id, 0, 0);&lt;br /&gt;
      if (msg_error()) {&lt;br /&gt;
         logf(ERROR, format(&amp;quot;macro event error on notify_list '%s'&amp;quot;, msg[0]));&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrNotify_list&amp;diff=4290</id>
		<title>Send WaitCall attrNotify list</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrNotify_list&amp;diff=4290"/>
				<updated>2011-01-21T14:50:26Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method sends notifications to a list of concrete recipients.&lt;br /&gt;
&lt;br /&gt;
This action can be called in [[Spel_Reference_Guide|spell code]] in method [[send_wait]] (or [[send]]) using [[Send_WaitCall_Attr|call_attr]] action.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, &amp;quot;notify_list&amp;quot;, &lt;br /&gt;
                string contact_persid, int evt_level, string evt_mtitle, string evt_mbody, string msg_ack, &lt;br /&gt;
                int trans_pt, string parent_object, int is_internal, int cmth_override)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called (could be &amp;quot;cr&amp;quot; for requsts and incidents, &amp;quot;chg&amp;quot; for changes, &amp;quot;iss&amp;quot; for issues)&lt;br /&gt;
* contact_persid - list of space (' ') separated persistent IDs of notified contacts&lt;br /&gt;
* evt_level - notification level (low, normal, high, emergency)&lt;br /&gt;
* evt_mtitle - message subject&lt;br /&gt;
* evtmbody - message body (plain text format)&lt;br /&gt;
* msg_ack -  unknown, but usually empty string: &amp;quot;&amp;quot;&lt;br /&gt;
* trans_pt - unknown, but has these values: 28 - for request; 29 - for change and issue&lt;br /&gt;
* parent_object - peristent ID of a base object (request, change...)&lt;br /&gt;
* is_internal - probably 0/1; usually 0&lt;br /&gt;
* cmth_override - ID of forced Notification method or 0 if method defined for given contact and evt_level should be used&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
No results.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
string evt_mtitle, evt_mbody;&lt;br /&gt;
evt_mtitle = format(&amp;quot;Change Order %s - '%s' Event Notify Group&amp;quot;, chg_ref_num, event_tmpl.condition.sym);&lt;br /&gt;
evt_mbody = format(&amp;quot;change %s event notification\n&amp;quot;, chg_ref_num);&lt;br /&gt;
evt_mbody += format(&amp;quot;priority: %d\n&amp;quot;, priority.sym);&lt;br /&gt;
evt_mbody += format(&amp;quot;assigned to: %s\n&amp;quot;, assignee.combo_name);&lt;br /&gt;
evt_mbody += format(&amp;quot;requester: %s\n&amp;quot;, requestor.combo_name);&lt;br /&gt;
evt_mbody += format(&amp;quot;description: %s\n&amp;quot;, description);&lt;br /&gt;
&lt;br /&gt;
int evt_level;&lt;br /&gt;
evt_level = 2;&lt;br /&gt;
int trans_pt;&lt;br /&gt;
trans_pt = 29; &lt;br /&gt;
string contact_persid;&lt;br /&gt;
&lt;br /&gt;
if (!is_null(group))&lt;br /&gt;
{&lt;br /&gt;
   contact_persid = misc::find_mang(group);&lt;br /&gt;
   if(!is_empty(contact_persid)) {&lt;br /&gt;
      send(top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cnt&amp;quot;, &amp;quot;notify_list&amp;quot;,&lt;br /&gt;
           contact_persid, evt_level, evt_mtitle, evt_mbody, &amp;quot;&amp;quot;, trans_pt, persistent_id, 0, 0);&lt;br /&gt;
      if (msg_error()) {&lt;br /&gt;
         logf(ERROR, format(&amp;quot;macro event error on notify_list '%s'&amp;quot;, msg[0]));&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Custom_Lookup_method_for_TextAPI&amp;diff=4280</id>
		<title>Custom Lookup method for TextAPI</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Custom_Lookup_method_for_TextAPI&amp;diff=4280"/>
				<updated>2011-01-11T17:04:49Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:R12 {{Global Header}} {{Global Announcement}}  == Overview == In text_api.cfg you can configure new attributes, which can be used in stru...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:R12]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
In text_api.cfg you can configure new attributes, which can be used in structured emails to create or modify SD objects. And the definition of a new attribute can use lookup method to convert some text field (i.e. user login) to object ID. A list of all standard conversion methods is in CMDB Administration Guide in chapter Conversion methods on page 189 in R12.1 documentation. And this article describes how to develop custom lookup method.&lt;br /&gt;
&lt;br /&gt;
== Procedures ==&lt;br /&gt;
=== Step 1. Create Spell method ===&lt;br /&gt;
First at all create free spell method (not connected to any object) with 4 parameters:&lt;br /&gt;
* string value - string value to convert&lt;br /&gt;
* string obj_name - name of object to which the returned value will be set&lt;br /&gt;
* object obj - real object to which the returned value will be set&lt;br /&gt;
* string attribute - name of attribute to which the returned value will be set&lt;br /&gt;
&lt;br /&gt;
Here is the example for custom lookup_cnt_by_phone method:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
uuid lookup_cnt_by_phone(string phone, string obj_type, object obj, string attribute)&lt;br /&gt;
{&lt;br /&gt;
	string method;&lt;br /&gt;
	method = &amp;quot;lookup_cnt_by_phone&amp;quot;;&lt;br /&gt;
	uuid contact;&lt;br /&gt;
&lt;br /&gt;
	logf(MILESTONE, &amp;quot;%s: Entering method: %s&amp;quot;, method, phone);&lt;br /&gt;
	logf(VERBOSE, &amp;quot;%s: obj_type=%s&amp;quot;, method, obj_type);&lt;br /&gt;
	logf(VERBOSE, &amp;quot;%s: attribute=%s&amp;quot;, method, attribute);&lt;br /&gt;
	logf(VERBOSE, &amp;quot;%s: obj.id=%s&amp;quot;, method, obj.id);&lt;br /&gt;
&lt;br /&gt;
	contact = (uuid)expand(format(&amp;quot;&amp;amp;{'%s' = cnt.phone_number-&amp;gt;id}&amp;quot;, phone));&lt;br /&gt;
	if (is_null(contact))&lt;br /&gt;
		logf(MILESTONE, &amp;quot;%s: User not found&amp;quot;, method);&lt;br /&gt;
	else&lt;br /&gt;
		logf(MILESTONE, &amp;quot;%s: User found: %s&amp;quot;, method, contact);&lt;br /&gt;
&lt;br /&gt;
	return contact;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2. Update configuration in text_api.cfg ===&lt;br /&gt;
To text_api.cfg configuration file insert this line after the last row begining with REQUEST:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
REQUEST.CUSTOMER_PHONE=customer.UUID.lookup_cnt_by_phone&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally restart Service Desk service.&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Sample_Customizations&amp;diff=4279</id>
		<title>Sample Customizations</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Sample_Customizations&amp;diff=4279"/>
				<updated>2011-01-11T16:32:05Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customization]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Customizations are regarded as changes to the system that are not supportable by CA.&lt;br /&gt;
&lt;br /&gt;
== List of Customizations ==&lt;br /&gt;
[[image:exclaim.gif]][[SDU:SDU r12 EP1|SDU Enhancement Pack 1 for r12]]&lt;br /&gt;
*[[Action Macro to Log Solution and Resolve Ticket]]&lt;br /&gt;
*[[Add Checkbox, Date, Drop-down, Lookup, Readonly and Text Fields to Properties]]&lt;br /&gt;
*[[Add Contact Search to Employee/Customer Interface]]&lt;br /&gt;
*[[Add Custom Activity Log Action Macro]]&lt;br /&gt;
*[[Add Log Entry for Updates to Custom Fields]]&lt;br /&gt;
*[[Add Log Entry When a Property Value Changes on a Ticket]]&lt;br /&gt;
*[[Add Personalized Response to Manual Notification]]&lt;br /&gt;
*[[Add Posted By to Announcements Page]]&lt;br /&gt;
*[[Add Properties Count to Area/Category List]]&lt;br /&gt;
*[[Add Ticket and CI Links to Announcements]]&lt;br /&gt;
*[[Add Workflow to Employee/Customer Interface]]&lt;br /&gt;
*[[Attachments on Configuration Items]]&lt;br /&gt;
*[[Attachments on Contacts]]&lt;br /&gt;
*[[Auto-fill Fields Left Blank]]&lt;br /&gt;
*[[Automatically Attach an Asset/CI to a Change Order or Issue]]&lt;br /&gt;
*[[Automatically Remove Attached Events]]&lt;br /&gt;
*[[Automatically Set Assignee to Closing Analyst]]&lt;br /&gt;
*[[Automatically Set System Generated Activities to Internal]]&lt;br /&gt;
*[[Changing Announcements Order By]]&lt;br /&gt;
*[[Changing Error Alert Color and adding Error Alert Pop-ups]]&lt;br /&gt;
*[[Changing Requests to Incidents]]&lt;br /&gt;
*[[Changing Display of Contacts]]&lt;br /&gt;
*[[Conditional Display of Drop-Down Content]]&lt;br /&gt;
*[[Conditionally Attach an Event]]&lt;br /&gt;
*[[Control the Request Areas Displayed to the End Users]]&lt;br /&gt;
*[[Count Ticket Reopens]]&lt;br /&gt;
*[[Custom Lookup method for TextAPI]]&lt;br /&gt;
*[[Displaying the System and User Descriptions in the Activity Log]]&lt;br /&gt;
*[[Display Web Site within Service Desk]]&lt;br /&gt;
*[[Default Properties Tab on New Ticket Creation]]&lt;br /&gt;
*[[Generate Notifications Only for Employee Comments]]&lt;br /&gt;
*[[Increasing Default Field Size]]&lt;br /&gt;
*[[List Tickets ORDER BY Group]]&lt;br /&gt;
*[[Make a Field Conditionally Required]]&lt;br /&gt;
*[[Modify Action and Condition Macros via the GUI]]&lt;br /&gt;
*[[Only Assignee can Close]]&lt;br /&gt;
*[[Prevent Close of Requests/Incidents/Problems if Change Order is Active]]&lt;br /&gt;
*[[Prevent Update to Past Activities]]&lt;br /&gt;
*[[Propagate Solution to Children]]&lt;br /&gt;
*[[Propagate Status to Children]]&lt;br /&gt;
*[[Priority and Impact Default to Empty]]&lt;br /&gt;
*[[Refresh Customer Info Before Saving the Ticket]]&lt;br /&gt;
*[[Remove Second Message on Timeout]]&lt;br /&gt;
*[[Remove SLA Violation from Employee View]]&lt;br /&gt;
*[[Require a Solution in Order to Resolve]]&lt;br /&gt;
*[[Require Assignee to be a Member of the selected Group]]&lt;br /&gt;
*[[Search Requests, Incidents, and Problems Simultaneously for Ticket Number]]&lt;br /&gt;
*[[Send Notification at Callback Time]]&lt;br /&gt;
*[[Send Notification to CI's Attached Contacts]]&lt;br /&gt;
*[[Send Survey based on Variables]]&lt;br /&gt;
*[[Separate Prefixes for Requests, Incidents, and Problems]]&lt;br /&gt;
*[[Set Defaults on Manual Notify]]&lt;br /&gt;
*[[Set Priority Based on Urgency and Impact]]&lt;br /&gt;
*[[Set Request/Incident/Problem Status from Change Order]]&lt;br /&gt;
*[[Set Request/Incident/Problem Status on Dispatch Change]]&lt;br /&gt;
*[[Simplified Child Creation]]&lt;br /&gt;
*[[Single Sign-on with Cookies]]&lt;br /&gt;
*[[EIAM Services dont start on fresh install]]&lt;br /&gt;
*[[SPELL CODE to Make ACT / EVT INTERNAL]]&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Is_empty&amp;diff=4084</id>
		<title>Is empty</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Is_empty&amp;diff=4084"/>
				<updated>2010-09-24T09:36:43Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r6 Category:r11 Category:r12 Category:Spell Code {{Global Header}} {{Global Announcement}}  == Overview == A spell function c...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A spell function checking if a given attribute is an empty string or equals to a NULL value.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
bool is_empty(attr);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* attr - any string variable to be checked&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Returns true if attr is NULL or is an empty string, otherwise returns false.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(is_empty(string1)) {&lt;br /&gt;
  // Enter an alert message that appears when the if statement is fulfilled&lt;br /&gt;
  zmsg=format(&amp;quot; string1 is required in order to close this ticket&amp;quot;);&lt;br /&gt;
  set_error(1);&lt;br /&gt;
  set_return_data(zmsg);&lt;br /&gt;
  return;&lt;br /&gt;
}&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;
string contact_persid;&lt;br /&gt;
if(!is_empty(contact_persid)) {&lt;br /&gt;
     // ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Is_null&amp;diff=4083</id>
		<title>Is null</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Is_null&amp;diff=4083"/>
				<updated>2010-09-24T09:30:41Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r6 Category:r11 Category:r12 Category:Spell Code {{Global Header}} {{Global Announcement}}  == Overview == A spell function c...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A spell function checking if a given attribute equals to a NULL value or not.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
bool is_null(attr);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* attr - any variable to be checked&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Returns true if attr is NULL otherwise false.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(is_null(string1)) {&lt;br /&gt;
  // Enter an alert message that appears when the if statement is fulfilled&lt;br /&gt;
  zmsg=format(&amp;quot; string1 is required in order to close this ticket&amp;quot;);&lt;br /&gt;
  set_error(1);&lt;br /&gt;
  set_return_data(zmsg);&lt;br /&gt;
  return;&lt;br /&gt;
}&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;
string contact_persid;&lt;br /&gt;
if (!is_null(group))&lt;br /&gt;
{&lt;br /&gt;
  contact_persid = misc::find_mang(group);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Spel_Reference_Guide&amp;diff=4082</id>
		<title>Spel Reference Guide</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Spel_Reference_Guide&amp;diff=4082"/>
				<updated>2010-09-24T09:21:11Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Reference Sections */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
Note: please treat SPELL as SPEL &lt;br /&gt;
== Overview ==&lt;br /&gt;
Spell is CA proprietary code used to script Service Desk core operations. Spell code can be found in .spl and .maj files located in [[$NX_ROOT]]\bopcfg\majic and [[$NX_ROOT]]\site\mods\majic directories. Other examples can be found in the [[$NX_ROOT]]\samples directory.&lt;br /&gt;
&lt;br /&gt;
Note: .spl files with a ''pcd'' preceding the .spl are encrypted files, such as chgpcd.spl or itilpcd.spl.&lt;br /&gt;
&lt;br /&gt;
Spell is usually used to write methods for object or attribute triggers.  Examples may be attribute validation, notification, post processing, etc.&lt;br /&gt;
&lt;br /&gt;
Spell is interpreted and executed by the Method Engine (spel_srvr), it can also be executed from the command line with bop_cmd command that interprets the fragment (.frg) files and executes the code.&lt;br /&gt;
&lt;br /&gt;
The language resembles C++.  Unlike C or C++, Spell does not support pointers or structures.&lt;br /&gt;
&lt;br /&gt;
== Reference Sections ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Functions&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[format]]&lt;br /&gt;
*[[getenv]]&lt;br /&gt;
*[[gsub]]&lt;br /&gt;
*[[is_empty]]&lt;br /&gt;
*[[is_null]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[misc:find_mang]]&lt;br /&gt;
*[[now]]&lt;br /&gt;
*[[send_wait]]&lt;br /&gt;
*[[sindex]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[strlen]]&lt;br /&gt;
*[[substr]]&lt;br /&gt;
*[[workshift_abs2work]]&lt;br /&gt;
*[[workshift_work2abs]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Statements&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[if]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[for]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[while]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Other&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Data Type Conversion]]&lt;br /&gt;
*[[Operators]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Spel FAQ]]&lt;br /&gt;
*[[Triggering Reaction]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Troubleshooting Spell Code|Troubleshooting]]&lt;br /&gt;
*[[Variables and Types]]&lt;br /&gt;
*[[Methods handling]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
[[WSSIWYG]] by Nero Le Velu&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrSync_fetch&amp;diff=4081</id>
		<title>Send WaitCall attrSync fetch</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrSync_fetch&amp;diff=4081"/>
				<updated>2010-09-09T08:30:30Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method synchronously fetch list of items from SD database. It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, &amp;quot;sync_fetch&amp;quot;, string rs_type, string query, int unknown, int param_num [, var parameters])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* ''timeout'' - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* ''top_object'' - root object for the method (on which the method is called)&lt;br /&gt;
* ''attr_name'' - name of attribute on which the action is called&lt;br /&gt;
* ''factory_name'' - the factory you want to call against (could be anything like pcat, cnt, cr, alg, ...)&lt;br /&gt;
* ''query'' - query determining what record(s) you want to be returned; query is on an Object level (so you can use similar queries used in Stored Queries, Additional Search arguments or bop_odump command)&lt;br /&gt;
* ''rs_type'' - the type of recordset you want returned. Should be one of these options:&lt;br /&gt;
** STATIC&lt;br /&gt;
** DYNAMIC&lt;br /&gt;
** MLIST_STATIC&lt;br /&gt;
** MLIST_DYNAMIC&lt;br /&gt;
** RLIST_STATIC&lt;br /&gt;
** RLIST_DYNAMIC&lt;br /&gt;
* ''unknown'' - don't know, but usually -1&lt;br /&gt;
* ''param_num'' - number of following  parameters&lt;br /&gt;
* ''parameters'' - variable number of parameters based on given query (for each ? must be exactly one parameter, which value will provide data for corresponding ?)&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
On success the resulted list is filled into a global array '''msg''' as follows:&lt;br /&gt;
* msg[0] - the recordset (object)&lt;br /&gt;
* msg[1] - the length of the recordset (records returned, int) &lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// get template by its persistent id&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cr_tpl&amp;quot;, &amp;quot;sync_fetch&amp;quot;, &amp;quot;RLIST_DYNAMIC&amp;quot;, &amp;quot;template = ?&amp;quot;,  -1, 1, cr.persistent_id);&lt;br /&gt;
// get group by id&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;grp&amp;quot;, &amp;quot;sync_fetch&amp;quot;, &amp;quot;RLIST_STATIC&amp;quot;, &amp;quot;id = ? AND delete_flag = 0&amp;quot;, -1, 1, new_group);&lt;br /&gt;
// get list of all remote referencies&lt;br /&gt;
send_wait( 0, top_object(), &amp;quot;call_attr&amp;quot;,&amp;quot;rrf&amp;quot;,&amp;quot;sync_fetch&amp;quot;, &amp;quot;RLIST_DYNAMIC&amp;quot;, &amp;quot;&amp;quot;, -1, 0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Gsub&amp;diff=4080</id>
		<title>Gsub</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Gsub&amp;diff=4080"/>
				<updated>2010-09-08T12:41:27Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ {{Global Header}} {{Global Announcement}}  == Overview == A spell function returning the string with every occurence of a given pattern replaced by another string.  == Usage == &amp;lt;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
A spell function returning the string with every occurence of a given pattern replaced by another string.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
string gsub(strSource, strRegEx, strReplacement);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* strSource - source string to be replaced&lt;br /&gt;
* strRegEx - regular expression pattern&lt;br /&gt;
* strReplacement - by which string should be pattern replaced&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Returns changed string or the same string if pattern does not match.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
* Convert several lines to a one comma separated string&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
 gsub(errorStr,&amp;quot;\n&amp;quot;, &amp;quot;, &amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Spel_Reference_Guide&amp;diff=4079</id>
		<title>Spel Reference Guide</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Spel_Reference_Guide&amp;diff=4079"/>
				<updated>2010-09-08T12:25:11Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
Note: please treat SPELL as SPEL &lt;br /&gt;
== Overview ==&lt;br /&gt;
Spell is CA proprietary code used to script Service Desk core operations. Spell code can be found in .spl and .maj files located in [[$NX_ROOT]]\bopcfg\majic and [[$NX_ROOT]]\site\mods\majic directories. Other examples can be found in the [[$NX_ROOT]]\samples directory.&lt;br /&gt;
&lt;br /&gt;
Note: .spl files with a ''pcd'' preceding the .spl are encrypted files, such as chgpcd.spl or itilpcd.spl.&lt;br /&gt;
&lt;br /&gt;
Spell is usually used to write methods for object or attribute triggers.  Examples may be attribute validation, notification, post processing, etc.&lt;br /&gt;
&lt;br /&gt;
Spell is interpreted and executed by the Method Engine (spel_srvr), it can also be executed from the command line with bop_cmd command that interprets the fragment (.frg) files and executes the code.&lt;br /&gt;
&lt;br /&gt;
The language resembles C++.  Unlike C or C++, Spell does not support pointers or structures.&lt;br /&gt;
&lt;br /&gt;
== Reference Sections ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Functions&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[format]]&lt;br /&gt;
*[[getenv]]&lt;br /&gt;
*[[gsub]]&lt;br /&gt;
*[[misc:find_mang]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[now]]&lt;br /&gt;
*[[send_wait]]&lt;br /&gt;
*[[sindex]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[strlen]]&lt;br /&gt;
*[[substr]]&lt;br /&gt;
*[[workshift_abs2work]]&lt;br /&gt;
*[[workshift_work2abs]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Statements&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[if]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[for]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[while]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Other&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Data Type Conversion]]&lt;br /&gt;
*[[Operators]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Spel FAQ]]&lt;br /&gt;
*[[Triggering Reaction]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Troubleshooting Spell Code|Troubleshooting]]&lt;br /&gt;
*[[Variables and Types]]&lt;br /&gt;
*[[Methods handling]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
[[WSSIWYG]] by Nero Le Velu&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrGet_groups_by_persid&amp;diff=4078</id>
		<title>Send WaitCall attrGet groups by persid</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrGet_groups_by_persid&amp;diff=4078"/>
				<updated>2010-08-25T11:36:52Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r11 Category:r12 Category:Spell Code {{Global Header}} {{Global Announcement}} == Overview == This method gets a list of groups f...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method gets a list of groups for specified user.&lt;br /&gt;
&lt;br /&gt;
This action can be called in [[Spel_Reference_Guide|spell code]] in method [[send_wait]] (or [[send]]) using [[Send_WaitCall_Attr|call_attr]] action.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, &amp;quot;cnt&amp;quot;, &amp;quot;get_groups_by_persid&amp;quot;, contact_persid)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* contact_persid - persistent ID of an user for which you are looking for attached groups&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
On success the resulted list is filled into a global array '''msg''' as follows:&lt;br /&gt;
* msg[0] - the number of assigned groups&lt;br /&gt;
* msg[1] - a list of group's UUIDs&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
int i;&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cnt&amp;quot;, &amp;quot;get_groups_by_persid&amp;quot;, &amp;quot;cnt:776B094702EABB4B87F04A139E72D44B&amp;quot;);&lt;br /&gt;
for (i=0;i&amp;lt;msg_length();i++) {&lt;br /&gt;
logf (SIGNIFICANT, &amp;quot;Msg index #%s: %s&amp;quot;, i,msg[i]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comment ==&lt;br /&gt;
'''This code does not work since SD R12.5. See this post: http://www.servicedeskusers.com/forum/index.php?showtopic=6047'''&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4077</id>
		<title>Send WaitCall Attr</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4077"/>
				<updated>2010-08-25T11:29:18Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Available actions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This is some kind of global method (callable on all objects). It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
Using this method you can call some actions on object's attributes or on other factories. So we can distinguis between usage of this method on '''object's attributes''' and '''other factories'''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
When calling action on some of top_object's attribute:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string attr_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
or when calling action on some distinct factory:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called&lt;br /&gt;
* action - name of the called action&lt;br /&gt;
* parameters - variable number of parameters based on the called action&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Methods usually fill global '''msg''' array with return values. What values are on what positions depends on the called action.&lt;br /&gt;
&lt;br /&gt;
== Available actions ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Object's attributes&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrGet_val|get_val]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrSet_val|set_val]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Other factories&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrCurrent_user_id|current_user_id]]&lt;br /&gt;
*[[send_WaitCall_attrDob_attr_list|dob_attr_list]]&lt;br /&gt;
*[[send_WaitCall_attrDob_by_persid|dob_by_persid]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrGet_domset|get_domset]]&lt;br /&gt;
*[[send_WaitCall_attrGet_groups_by_persid|get_groups_by_persid]]&lt;br /&gt;
*[[send_WaitCall_attrGet_new_dob|get_new_dob]]&lt;br /&gt;
*[[send_WaitCall_attrNew_attached_event|new_attached_event]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrNotify_list|notify_list]]&lt;br /&gt;
*[[send_WaitCall_attrSync_fetch|sync_fetch]]&lt;br /&gt;
*[[send_WaitCall_attrVal_by_key|val_by_key]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Get currently logged in user&lt;br /&gt;
uuid login_userid&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cr&amp;quot;, &amp;quot;current_user_id&amp;quot;);&lt;br /&gt;
login_userid = msg[0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4076</id>
		<title>Send WaitCall Attr</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=4076"/>
				<updated>2010-08-25T11:27:55Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Available actions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This is some kind of global method (callable on all objects). It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
Using this method you can call some actions on object's attributes or on other factories. So we can distinguis between usage of this method on '''object's attributes''' and '''other factories'''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
When calling action on some of top_object's attribute:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string attr_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
or when calling action on some distinct factory:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called&lt;br /&gt;
* action - name of the called action&lt;br /&gt;
* parameters - variable number of parameters based on the called action&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Methods usually fill global '''msg''' array with return values. What values are on what positions depends on the called action.&lt;br /&gt;
&lt;br /&gt;
== Available actions ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Object's attributes&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrGet_val|get_val]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrSet_val|set_val]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Other factories&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrCurrent_user_id|current_user_id]]&lt;br /&gt;
*[[send_WaitCall_attrDob_attr_list|dob_attr_list]]&lt;br /&gt;
*[[send_WaitCall_attrDob_by_persid|dob_by_persid]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrGet_domset|get_domset]]&lt;br /&gt;
*[[send_WaitCall_attrGet_groups_by_persid|get_group_by_persid]]&lt;br /&gt;
*[[send_WaitCall_attrGet_new_dob|get_new_dob]]&lt;br /&gt;
*[[send_WaitCall_attrNew_attached_event|new_attached_event]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrNotify_list|notify_list]]&lt;br /&gt;
*[[send_WaitCall_attrSync_fetch|sync_fetch]]&lt;br /&gt;
*[[send_WaitCall_attrVal_by_key|val_by_key]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Get currently logged in user&lt;br /&gt;
uuid login_userid&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cr&amp;quot;, &amp;quot;current_user_id&amp;quot;);&lt;br /&gt;
login_userid = msg[0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitLog_event&amp;diff=3997</id>
		<title>Send WaitLog event</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitLog_event&amp;diff=3997"/>
				<updated>2009-12-07T13:23:53Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r11 Category:r12 Category:Spell Code {{Global Header}} {{Global Announcement}} == Overview == This method create activity Event O...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method create activity Event Occured to object's activity log. This method is valid for CR as well for CHG objects.&lt;br /&gt;
&lt;br /&gt;
This action can be called in [[Spel_Reference_Guide|spell code]] in method [[send_wait]].&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;log_event&amp;quot;, object group_leader, uuid userid, string message)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* group_leader - Group leader object obtained from [[Send_WaitGet_Co_group|get_co_group]] method&lt;br /&gt;
* userid - user designated as action creator&lt;br /&gt;
* message - user description in object's activity&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
On success nothing. If error occured msg[0] contains error message.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/ add an activity log. requires the macro be locked.&lt;br /&gt;
uuid log_userid;&lt;br /&gt;
// log_userid = Administrator&lt;br /&gt;
log_userid = (uuid)&amp;quot;4FE1477A236A2A44A3B05A628DCBE661&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// get info from event to store in log description&lt;br /&gt;
string log;&lt;br /&gt;
log = format(&amp;quot;event '%s' triggered by condition '%s'.&amp;quot;, event_tmpl.sym, event_tmpl.condition.sym);&lt;br /&gt;
&lt;br /&gt;
send_wait(0, this, &amp;quot;log_event&amp;quot;, group_leader, log_userid, log);&lt;br /&gt;
if (msg_error()) {&lt;br /&gt;
logf(ERROR, format(&amp;quot;macro event error '%s'&amp;quot;, msg[0]));&lt;br /&gt;
} &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrNew_attached_event&amp;diff=3996</id>
		<title>Send WaitCall attrNew attached event</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrNew_attached_event&amp;diff=3996"/>
				<updated>2009-12-07T10:18:18Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method for attaching events to CR or CHG objects.&lt;br /&gt;
&lt;br /&gt;
This action can be called in [[Spel_Reference_Guide|spell code]] in method [[send_wait]] for [[Send_WaitCall_Attr|call_attr]].&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, &amp;quot;new_attached_event&amp;quot;, &lt;br /&gt;
                object group_leader, string obj_persid, string evt_name, duration NULL|override_duration, &lt;br /&gt;
                date NULL|override_starttime, string goup_name, int unknown1, int unknown2, string timezone)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called (could be &amp;quot;cr&amp;quot; for requsts and incidents, &amp;quot;chg&amp;quot; for changes, &amp;quot;iss&amp;quot; for issues)&lt;br /&gt;
* group_leader - Group leader object obtained from [[Send_WaitGet_Co_group|get_co_group]] method&lt;br /&gt;
* obj_persid - persistence_id of CR or CHG object which the event will be connected to&lt;br /&gt;
* evt_name - name provided in evt.sym field&lt;br /&gt;
* override_duration - if you want to pass NULL it must be casted: (duration)NULL&lt;br /&gt;
* override_starttime - if you want to pass NULL it must be casted: (date)NULL&lt;br /&gt;
* group_name - simple string which will be stored in atev.group_name field; this is usefull for later filtering&lt;br /&gt;
* unknown1 - simply put 0 there&lt;br /&gt;
* unknown2 - ['''R11+'''] simply put 0 there&lt;br /&gt;
* timezone - ['''R12+'''] persistent_id form tz object. Run ''bop_odump domsrvr tz &amp;quot;&amp;quot; sym code gmt_delta'' in command line and find your timezone and put Persid value here&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
On success nothing. If error occured msg[0] contains error message.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
object group_leader;&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;get_co_group&amp;quot;);&lt;br /&gt;
group_leader = msg[0];&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;evt&amp;quot;, &amp;quot;new_attached_event&amp;quot;,&lt;br /&gt;
          group_leader, argv[3], &amp;quot;Close Incident&amp;quot;, (duration) NULL,&lt;br /&gt;
          (date) NULL, &amp;quot;CLS&amp;quot;, 0, 0);&lt;br /&gt;
if (msg_error()) {&lt;br /&gt;
 logf(ERROR, &amp;quot;new_attached_event failed: (%s)&amp;quot;, msg[0]);&lt;br /&gt;
 return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Display_Buttons_for_Group_members_only&amp;diff=3995</id>
		<title>Display Buttons for Group members only</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Display_Buttons_for_Group_members_only&amp;diff=3995"/>
				<updated>2009-12-02T11:03:31Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r11 Category:r12 {{Global Header}} {{Global Announcement}}  == Overview == This article describe in example how to simply show a butt...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
This article describe in example how to simply show a button (or anything else, button code of course can be easily changed) on page only for members of group filled in ticket.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
We need to show button Take, which change status from Assigned to Work in progress and set Assignee to logged in user, but this button must be shown only for members of a group filled in ticket. Here is a solution for Incident object, but for change object is the solution very similar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;PDM_IF &amp;quot;$cst.group_list.length&amp;quot; \&amp;gt; &amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
	// check if logged user is in ticket's group&lt;br /&gt;
	if (false	// to prevent || operator as a first literal in command, add this &amp;quot;non-sense&amp;quot; literal (false) to if condition&lt;br /&gt;
	&amp;lt;PDM_LIST PREFIX=&amp;quot;list&amp;quot; FACTORY=&amp;quot;grpmem&amp;quot; WHERE=&amp;quot;member = U'$cst.id'&amp;quot;&amp;gt;&lt;br /&gt;
		|| '$list.group' == '$args.group'&lt;br /&gt;
	&amp;lt;/PDM_LIST&amp;gt;&lt;br /&gt;
	) {&lt;br /&gt;
		// this is ticket on one of my groups and isn't mine, so draw Take/Control button&lt;br /&gt;
		popupURLtk = '$cgi?SID=$SESSION.SID+FID=' +  fid_generator() + &lt;br /&gt;
			'+FACTORY=cr+PERSID=$args.persistent_id+OP=UPDATE+ACTIVITY_LOG_TYPE=ST+HTMPL=xfer_take_cr.htmpl'; &lt;br /&gt;
		ImgBtnCreate('take', 'Take', &amp;quot;popupActivityWithURL(popupURLtk, 'status')&amp;quot;, true, 120);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/PDM_IF&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Screen_Changes&amp;diff=3994</id>
		<title>Screen Changes</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Screen_Changes&amp;diff=3994"/>
				<updated>2009-12-02T10:52:12Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customization]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
[[Additional Sorting on List Panel]]&lt;br /&gt;
&lt;br /&gt;
[[Display Buttons for Group members only]]&lt;br /&gt;
&lt;br /&gt;
[[Display Buttons for specific Roles only]]&lt;br /&gt;
&lt;br /&gt;
[[How to Script Buttons]]&lt;br /&gt;
&lt;br /&gt;
[[Web Screen Painter]]&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Display_Buttons_for_specific_Roles_only&amp;diff=3993</id>
		<title>Display Buttons for specific Roles only</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Display_Buttons_for_specific_Roles_only&amp;diff=3993"/>
				<updated>2009-12-02T10:49:54Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r12 {{Global Header}} {{Global Announcement}}  == Overview == This article describe in example how to simply show a button (or anything e...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r12]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
This article describe in example how to simply show a button (or anything else, button code of course can be easily changed) on page only for some specific roles.&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
This example draws a button &amp;quot;Convert to incident&amp;quot; only for roles ''Administrator'', ''Level 1 Analyst'' and ''Service Desk Manager''. You can place it anywhere into detail_cr.htmpl page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var role_list_txt = &amp;lt;PDM_FMT ESC_STYLE=C PAD=NO&amp;gt;&amp;quot;$SESSION.ROLE_LIST&amp;quot;&amp;lt;/PDM_FMT&amp;gt;;&lt;br /&gt;
var role_list = role_list_txt.split( &amp;quot;@,@&amp;quot; );&lt;br /&gt;
if (role_list.length &amp;gt; 2)&lt;br /&gt;
{&lt;br /&gt;
	var roleName = '';&lt;br /&gt;
	for (var i=1; i&amp;lt;role_list.length; i+=2) {&lt;br /&gt;
		if (role_list[i] == $SESSION.ROLE_ID) {&lt;br /&gt;
			roleName = role_list[i-1];&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	if (roleName == 'Administrator' || roleName == 'Level 1 Analyst' || roleName == 'Service Desk Manager') {&lt;br /&gt;
		var popupURL = '$cgi?SID=$SESSION.SID+FID=' +  fid_generator() + &lt;br /&gt;
			'+FACTORY=cr+PERSID=$args.persistent_id+OP=UPDATE+ACTIVITY_LOG_TYPE=FLD+HTMPL=act_chgtype_cr.htmpl';&lt;br /&gt;
		&amp;lt;PDM_MACRO NAME=button CAPTION=&amp;quot;Convert to incident&amp;quot; ID=convert_to_incident &lt;br /&gt;
			FUNC=&amp;quot;popupActivityWithURL(popupURL, 'crtype')&amp;quot; WIDTH=180 NEWROW=yes ENDROW=yes&amp;gt;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''This example works only on SD R12!!!'''&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Screen_Changes&amp;diff=3992</id>
		<title>Screen Changes</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Screen_Changes&amp;diff=3992"/>
				<updated>2009-12-02T10:21:35Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customization]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
[[Additional Sorting on List Panel]]&lt;br /&gt;
&lt;br /&gt;
[[Display Buttons for specific Roles only]]&lt;br /&gt;
&lt;br /&gt;
[[How to Script Buttons]]&lt;br /&gt;
&lt;br /&gt;
[[Web Screen Painter]]&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrNotify_list&amp;diff=3969</id>
		<title>Send WaitCall attrNotify list</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrNotify_list&amp;diff=3969"/>
				<updated>2009-09-10T12:06:26Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r11 Category:Spell Code {{Global Header}} {{Global Announcement}} == Overview == This method sends notifications to a list of concret...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method sends notifications to a list of concrete recipients.&lt;br /&gt;
&lt;br /&gt;
This action can be called in [[Spel_Reference_Guide|spell code]] in method [[send_wait]] (or [[send]]) using [[Send_WaitCall_Attr|call_attr]] action.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, &amp;quot;notify_list&amp;quot;, &lt;br /&gt;
                string contact_persid, int evt_level, string evt_mtitle, string evt_mbody, string unknown1, &lt;br /&gt;
                int trans_pt, string parent_object, int uknown2, int unknown3)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called (could be &amp;quot;cr&amp;quot; for requsts and incidents, &amp;quot;chg&amp;quot; for changes, &amp;quot;iss&amp;quot; for issues)&lt;br /&gt;
* contact_persid - list of space (' ') separated persistent IDs of notified contacts&lt;br /&gt;
* evt_level - notification level (low, normal, high, emergency)&lt;br /&gt;
* evt_mtitle - message subject&lt;br /&gt;
* evtmbody - message body (plain text format)&lt;br /&gt;
* unknown1 -  usually empty string: &amp;quot;&amp;quot;&lt;br /&gt;
* trans_pt - unknown, but has these values: 28 - for request; 29 - for change and issue&lt;br /&gt;
* parent_object - peristent ID of a base object (request, change...)&lt;br /&gt;
* unknown2 - usually 0&lt;br /&gt;
* unknown3 - usually 0&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
No results.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
string evt_mtitle, evt_mbody;&lt;br /&gt;
evt_mtitle = format(&amp;quot;Change Order %s - '%s' Event Notify Group&amp;quot;, chg_ref_num, event_tmpl.condition.sym);&lt;br /&gt;
evt_mbody = format(&amp;quot;change %s event notification\n&amp;quot;, chg_ref_num);&lt;br /&gt;
evt_mbody += format(&amp;quot;priority: %d\n&amp;quot;, priority.sym);&lt;br /&gt;
evt_mbody += format(&amp;quot;assigned to: %s\n&amp;quot;, assignee.combo_name);&lt;br /&gt;
evt_mbody += format(&amp;quot;requester: %s\n&amp;quot;, requestor.combo_name);&lt;br /&gt;
evt_mbody += format(&amp;quot;description: %s\n&amp;quot;, description);&lt;br /&gt;
&lt;br /&gt;
int evt_level;&lt;br /&gt;
evt_level = 2;&lt;br /&gt;
int trans_pt;&lt;br /&gt;
trans_pt = 29; &lt;br /&gt;
string contact_persid;&lt;br /&gt;
&lt;br /&gt;
if (!is_null(group))&lt;br /&gt;
{&lt;br /&gt;
   contact_persid = misc::find_mang(group);&lt;br /&gt;
   if(!is_empty(contact_persid)) {&lt;br /&gt;
      send(top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cnt&amp;quot;, &amp;quot;notify_list&amp;quot;,&lt;br /&gt;
           contact_persid, evt_level, evt_mtitle, evt_mbody, &amp;quot;&amp;quot;, trans_pt, persistent_id, 0, 0);&lt;br /&gt;
      if (msg_error()) {&lt;br /&gt;
         logf(ERROR, format(&amp;quot;macro event error on notify_list '%s'&amp;quot;, msg[0]));&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=3968</id>
		<title>Send WaitCall Attr</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_Attr&amp;diff=3968"/>
				<updated>2009-09-10T11:46:59Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Available actions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This is some kind of global method (callable on all objects). It can be called in [[Spel_Reference_Guide|Spell Code]] using [[send_wait]] method.&lt;br /&gt;
&lt;br /&gt;
Using this method you can call some actions on object's attributes or on other factories. So we can distinguis between usage of this method on '''object's attributes''' and '''other factories'''.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
When calling action on some of top_object's attribute:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string attr_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
or when calling action on some distinct factory:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, string action_name, [ var parameters… ])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called&lt;br /&gt;
* action - name of the called action&lt;br /&gt;
* parameters - variable number of parameters based on the called action&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Methods usually fill global '''msg''' array with return values. What values are on what positions depends on the called action.&lt;br /&gt;
&lt;br /&gt;
== Available actions ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Object's attributes&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrGet_val|get_val]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrSet_val|set_val]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Other factories&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrCurrent_user_id|current_user_id]]&lt;br /&gt;
*[[send_WaitCall_attrDob_attr_list|dob_attr_list]]&lt;br /&gt;
*[[send_WaitCall_attrDob_by_persid|dob_by_persid]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrGet_domset|get_domset]]&lt;br /&gt;
*[[send_WaitCall_attrGet_new_dob|get_new_dob]]&lt;br /&gt;
*[[send_WaitCall_attrNew_attached_event|new_attached_event]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_WaitCall_attrNotify_list|notify_list]]&lt;br /&gt;
*[[send_WaitCall_attrSync_fetch|sync_fetch]]&lt;br /&gt;
*[[send_WaitCall_attrVal_by_key|val_by_key]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Get currently logged in user&lt;br /&gt;
uuid login_userid&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;cr&amp;quot;, &amp;quot;current_user_id&amp;quot;);&lt;br /&gt;
login_userid = msg[0];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Misc:find_mang&amp;diff=3967</id>
		<title>Misc:find mang</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Misc:find_mang&amp;diff=3967"/>
				<updated>2009-09-10T11:27:26Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r11 Category:Spell Code {{Global Header}} {{Global Announcement}} == Overview == Returna a list of managers of one specific group. Fo...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
Returna a list of managers of one specific group. For a group provided in the first argument get list of all managers '''with notify_flag checked'''.&lt;br /&gt;
&lt;br /&gt;
It is used in macro Notify Group Manager.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
string misc_find_mang(uuid group)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Return space (' ') separated list of persids to contact table (returned managers).&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
string contact_persid;&lt;br /&gt;
if (!is_null(group))&lt;br /&gt;
{&lt;br /&gt;
contact_persid = misc::find_mang(group);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Spel_Reference_Guide&amp;diff=3966</id>
		<title>Spel Reference Guide</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Spel_Reference_Guide&amp;diff=3966"/>
				<updated>2009-09-10T11:19:41Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: /* Reference Sections */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Spell is CA proprietary code used to script Service Desk core operations. Spell code can be found in .spl and .maj files located in [[$NX_ROOT]]\bopcfg\majic and [[$NX_ROOT]]\site\mods\majic directories. Other examples can be found in the [[$NX_ROOT]]\samples directory.&lt;br /&gt;
&lt;br /&gt;
Note: .spl files with a ''pcd'' preceding the .spl are encrypted files, such as chgpcd.spl or itilpcd.spl.&lt;br /&gt;
&lt;br /&gt;
Spell is usually used to write methods for object or attribute triggers.  Examples may be attribute validation, notification, post processing, etc.&lt;br /&gt;
&lt;br /&gt;
Spell is interpreted and executed by the Method Engine (spel_srvr), it can also be executed from the command line with bop_cmd command that interprets the fragment (.frg) files and executes the code.&lt;br /&gt;
&lt;br /&gt;
The language resembles C++.  Unlike C or C++, Spell does not support pointers or structures.&lt;br /&gt;
&lt;br /&gt;
== Reference Sections ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Functions&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[format]]&lt;br /&gt;
*[[getenv]]&lt;br /&gt;
*[[misc:find_mang]]&lt;br /&gt;
*[[now]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_wait]]&lt;br /&gt;
*[[sindex]]&lt;br /&gt;
*[[strlen]]&lt;br /&gt;
*[[substr]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[workshift_abs2work]]&lt;br /&gt;
*[[workshift_work2abs]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Statements&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[if]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[for]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[while]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Other&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Data Type Conversion]]&lt;br /&gt;
*[[Operators]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Spel FAQ]]&lt;br /&gt;
*[[Triggering Reaction]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Troubleshooting Spell Code|Troubleshooting]]&lt;br /&gt;
*[[Variables and Types]]&lt;br /&gt;
*[[Methods handling]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
[[WSSIWYG]] by Nero Le Velu&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Spel_Reference_Guide&amp;diff=3965</id>
		<title>Spel Reference Guide</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Spel_Reference_Guide&amp;diff=3965"/>
				<updated>2009-09-10T11:17:45Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Spell is CA proprietary code used to script Service Desk core operations. Spell code can be found in .spl and .maj files located in [[$NX_ROOT]]\bopcfg\majic and [[$NX_ROOT]]\site\mods\majic directories. Other examples can be found in the [[$NX_ROOT]]\samples directory.&lt;br /&gt;
&lt;br /&gt;
Note: .spl files with a ''pcd'' preceding the .spl are encrypted files, such as chgpcd.spl or itilpcd.spl.&lt;br /&gt;
&lt;br /&gt;
Spell is usually used to write methods for object or attribute triggers.  Examples may be attribute validation, notification, post processing, etc.&lt;br /&gt;
&lt;br /&gt;
Spell is interpreted and executed by the Method Engine (spel_srvr), it can also be executed from the command line with bop_cmd command that interprets the fragment (.frg) files and executes the code.&lt;br /&gt;
&lt;br /&gt;
The language resembles C++.  Unlike C or C++, Spell does not support pointers or structures.&lt;br /&gt;
&lt;br /&gt;
== Reference Sections ==&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Functions&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[format]]&lt;br /&gt;
*[[getenv]]&lt;br /&gt;
*[[now]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[send_wait]]&lt;br /&gt;
*[[sindex]]&lt;br /&gt;
*[[strlen]]&lt;br /&gt;
*[[substr]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[workshift_abs2work]]&lt;br /&gt;
*[[workshift_work2abs]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Statements&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[if]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[for]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[while]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=3|'''&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;Other&amp;lt;/font&amp;gt;'''&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;34%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Data Type Conversion]]&lt;br /&gt;
*[[Operators]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Spel FAQ]]&lt;br /&gt;
*[[Triggering Reaction]]&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; align=&amp;quot;left&amp;quot; style=&amp;quot;vertical-align:top;&amp;quot; |&lt;br /&gt;
*[[Troubleshooting Spell Code|Troubleshooting]]&lt;br /&gt;
*[[Variables and Types]]&lt;br /&gt;
*[[Methods handling]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
[[WSSIWYG]] by Nero Le Velu&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Now&amp;diff=3960</id>
		<title>Now</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Now&amp;diff=3960"/>
				<updated>2009-08-21T13:11:21Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
Return current date and time in datetime format. It can be converted to Unix timestamp using cast to int.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
date now()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Current date and time in datetime format.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
chg.modified_date = now();&lt;br /&gt;
alg.time_spent = now() - time_stamp;&lt;br /&gt;
&lt;br /&gt;
if ((int)now() &amp;gt; (int)need_by-600) {&lt;br /&gt;
set_return_data(TRUE);&lt;br /&gt;
} else {&lt;br /&gt;
set_return_data(FALSE);&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Now&amp;diff=3959</id>
		<title>Now</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Now&amp;diff=3959"/>
				<updated>2009-08-21T06:39:30Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r6]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
Return current date and time in Unix datetime format.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
int now()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
Current date and time in Unix datetime format.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
chg.modified_date = now();&lt;br /&gt;
alg.time_spent = now() - time_stamp;&lt;br /&gt;
&lt;br /&gt;
if (now() &amp;gt; need_by) {&lt;br /&gt;
set_return_data(TRUE);&lt;br /&gt;
} else {&lt;br /&gt;
set_return_data(FALSE);&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrNew_attached_event&amp;diff=3955</id>
		<title>Send WaitCall attrNew attached event</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitCall_attrNew_attached_event&amp;diff=3955"/>
				<updated>2009-07-30T06:43:58Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: New page: __NOTOC__ Category:Customizations Category:r11 Category:Spell Code {{Global Header}} {{Global Announcement}} == Overview == This method for attaching events to CR or CHG object...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method for attaching events to CR or CHG objects.&lt;br /&gt;
&lt;br /&gt;
This action can be called in [[Spel_Reference_Guide|spell code]] in method [[send_wait]] for [[Send_WaitCall_Attr|call_attr]].&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, &amp;quot;new_attached_event&amp;quot;, &lt;br /&gt;
                object group_leader, string obj_persid, string evt_name, duration NULL|override_duration, &lt;br /&gt;
                date NULL|override_starttime, string goup_name, int unknown, int unknown)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called (could be &amp;quot;cr&amp;quot; for requsts and incidents, &amp;quot;chg&amp;quot; for changes, &amp;quot;iss&amp;quot; for issues)&lt;br /&gt;
* group_leader - Group leader object obtained from [[Send_WaitGet_Co_group|get_co_group]] method&lt;br /&gt;
* obj_persid - persistence_id of CR or CHG object which the event will be connected to&lt;br /&gt;
* evt_name - name provided in evt.sym field&lt;br /&gt;
* override_duration - if you want to pass NULL it must be casted: (duration)NULL&lt;br /&gt;
* override_starttime - if you want to pass NULL it must be casted: (date)NULL&lt;br /&gt;
* group_name - simple string which will be stored in atev.group_name field; this is usefull for later filtering&lt;br /&gt;
* unknown - simply put 0 there&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
On success nothing. If error occured msg[0] contains error message.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
object group_leader;&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;get_co_group&amp;quot;);&lt;br /&gt;
group_leader = msg[0];&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;evt&amp;quot;, &amp;quot;new_attached_event&amp;quot;,&lt;br /&gt;
          group_leader, argv[3], &amp;quot;Close Incident&amp;quot;, (duration) NULL,&lt;br /&gt;
          (date) NULL, &amp;quot;CLS&amp;quot;, 0, 0);&lt;br /&gt;
if (msg_error()) {&lt;br /&gt;
 logf(ERROR, &amp;quot;new_attached_event failed: (%s)&amp;quot;, msg[0]);&lt;br /&gt;
 return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	<entry>
		<id>http://greggsmith.net/wiki/index.php?title=Send_WaitGet_Co_group&amp;diff=3954</id>
		<title>Send WaitGet Co group</title>
		<link rel="alternate" type="text/html" href="http://greggsmith.net/wiki/index.php?title=Send_WaitGet_Co_group&amp;diff=3954"/>
				<updated>2009-07-29T10:10:40Z</updated>
		
		<summary type="html">&lt;p&gt;Kowy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Customizations]]&lt;br /&gt;
[[Category:r11]]&lt;br /&gt;
[[Category:Spell Code]]&lt;br /&gt;
{{Global Header}}&lt;br /&gt;
{{Global Announcement}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
This method for attaching events to CR or CHG objects.&lt;br /&gt;
&lt;br /&gt;
This action can be called in [[Spel_Reference_Guide|spell code]] in method [[send_wait]] for [[Send_WaitCall_Attr|call_attr]].&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
void send_wait (int timeout, object top_object, &amp;quot;call_attr&amp;quot;, string factory_name, &amp;quot;new_attached_event&amp;quot;, &lt;br /&gt;
                object group_leader, string obj_persid, string evt_name, duration NULL|override_duration, &lt;br /&gt;
                date NULL|override_starttime, string goup_name, int unknown, int unknown)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* timeout - how long (?in seconds?) should the method wait for finishing the method (0 means infinite)&lt;br /&gt;
* top_object - root object for the method (on which the method is called)&lt;br /&gt;
* attr_name - name of attribute on which the action is called&lt;br /&gt;
* factory_name - name of factory on which the action is called (could be &amp;quot;cr&amp;quot; for requsts and incidents, &amp;quot;chg&amp;quot; for changes, &amp;quot;iss&amp;quot; for issues)&lt;br /&gt;
* group_leader - Group leader object obtained from [[Send_WaitGet_Co_group|get_co_group]] method&lt;br /&gt;
* obj_persid - persistence_id of CR or CHG object which the event will be connected to&lt;br /&gt;
* evt_name - name provided in evt.sym field&lt;br /&gt;
* override_duration - if you want to pass NULL it must be casted: (duration)NULL&lt;br /&gt;
* override_starttime - if you want to pass NULL it must be casted: (date)NULL&lt;br /&gt;
* group_name - simple string which will be stored in atev.group_name field; this is usefull for later filtering&lt;br /&gt;
* unknown - simply put 0 there&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
On success nothing. If error occured msg[0] contains error message.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
object group_leader;&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;get_co_group&amp;quot;);&lt;br /&gt;
group_leader = msg[0];&lt;br /&gt;
send_wait(0, top_object(), &amp;quot;call_attr&amp;quot;, &amp;quot;evt&amp;quot;, &amp;quot;new_attached_event&amp;quot;,&lt;br /&gt;
          group_leader, argv[3], &amp;quot;Close Incident&amp;quot;, (duration) NULL,&lt;br /&gt;
          (date) NULL, &amp;quot;CLS&amp;quot;, 0, 0);&lt;br /&gt;
if (msg_error()) {&lt;br /&gt;
 logf(ERROR, &amp;quot;new_attached_event failed: (%s)&amp;quot;, msg[0]);&lt;br /&gt;
 return;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kowy</name></author>	</entry>

	</feed>