<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://www.novell.com/communities" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Identity &amp; Security Management Cool Solutions</title>
 <link>http://www.novell.com/communities/coolsolutions/ism</link>
 <description>Area where Identity &amp; Security Management users gather.</description>
 <language>en</language>
<item>
 <title>Using DNS Aliases with SPNEGO</title>
 <link>http://www.novell.com/communities/node/9220/using-dns-aliases-spnego</link>
 <description> &lt;p&gt;One of the great features of Novell Access Manager is the integrated single sign-on capability from &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2930&quot;&gt;&lt;acronym title=&quot;An advanced, hierarchical directory service that is an integral part of the Microsoft Windows 2000 architecture. It is LDAP-compliant and built on the Internet&quot;&gt;Microsoft Active Directory&lt;/acronym&gt;&lt;/a&gt; (AD) domain member workstations.  Through the use of Kerberos and the Simple and Protected GSS-&lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2636&quot;&gt;&lt;acronym title=&quot;application programming interfaceA set of functions, procedures, values, or other defined interface standards that an application uses to request and carry out services performed by another program or by an operating system. A single API typically specifies how input should be requested and obtained, and how output should be done.&quot;&gt;API&lt;/acronym&gt;&lt;/a&gt; Negotiation Mechanism (SPNEGO), the Access Manager Identity Server (IdS) can seamlessly authenticate a Windows desktop.  &lt;/p&gt;
&lt;p&gt;Users logon to the desktop using their normal credentials and then when they attempt to access an Access Manager protected site, they are not required to login again.  Instead, a token is passed to the Access Manager IdS from the workstation.  The IdS then verifies that token and allows the user access per the policies as defined in Access Manager.  &lt;/p&gt;
&lt;p&gt;Complete details on configuring Access Manager can be found in the product documentation.   This basically works by the client requesting a service ticket from the domain controller for the IdS.  The actual name it passes to the domain controller is known as the Service Principal Name (SPN).  &lt;/p&gt;
&lt;p&gt;The SPN is made up of three components, the &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/785&quot;&gt;&lt;acronym title=&quot;1. Short for protocol stack.2. A uniform set of rules or an agreed-upon method of communication that enable two devices to connect and transmit data or to send particular types of information between computer systems. Protocols determine how data is transmitted between computing devices and over networks. AFP, ALAP, RTMP, NCP, and IPX are examples of network protocols. AFP, ALAP, RTMP, NCP, and IPX are examples of network protocols. TCP/IP (Transfer Control Protocol/Internet Protocol), HTTP (Hypertext Transfer Protocol), and FTP (File Transfer Protocol) are examples of Internet protocols.&quot;&gt;protocol&lt;/acronym&gt;&lt;/a&gt;, the fully qualified domain name of the IdS and the client’s own AD domain name (known as the realm).  So, for example, lets say that the &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/1292&quot;&gt;&lt;acronym title=&quot;1. DaVinci Names Service: A DaVinci product that provides email directory services.2. distributed name services3. Domain Name System: A distributed database system that converts name-based addresses to TCP/IP addresses and vice versa for computers on a network or on the Internet.&quot;&gt;DNS&lt;/acronym&gt;&lt;/a&gt; name of our IdS (the Base &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2554&quot;&gt;&lt;acronym title=&quot;Uniform Resource LocatorThe addressing system used in the World Wide Web and other Internet resources. The URL contains information about the method of access (http://, for example), the name of the host and domain (such as www.suse.de) to be accessed, and the path of any file or document (such as /company/index.html) to be accessed. The complete URL of this example is http://www.suse.de/company/index.html.&quot;&gt;URL&lt;/acronym&gt;&lt;/a&gt;) is ids1.appdomain.com and our AD domain (the realm) is ad.appdomain.com.  This would make our SPN, as sent by the workstation, the following:&lt;/p&gt;
&lt;pre&gt;HTTP/ids1.appdomain.com@AD.APPDOMAIN.COM

&lt;/pre&gt;&lt;p&gt;This is what would be sent to the domain controller (the protocol is always listed as HTTP even if it is &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2856&quot;&gt;&lt;acronym title=&quot;Hypertext Transfer Protocol over Secure Socket Layer (SSL).A Web protocol that encrypts and decrypts user page requests as well as the pages that are returned by the Web server. HTTPS uses port 443 instead of HTTP port 80 in its interactions with TCP/IP.&quot;&gt;HTTPS&lt;/acronym&gt;&lt;/a&gt;).  The client gets back a token that has information about the user in a service ticket encrypted within the token.  This is passed in the header to the IdS where it is decrypted (using the shared secret in the nidpkey.keytab file).  At this point the user is authenticated and Access Manager will grant or deny access as appropriate.&lt;/p&gt;
&lt;p&gt;This all works fine as long as the fully qualified domain name used to build the SPN matches the actual DNS host record (A record) returned when the Windows desktop does a DNS query for ids1.appdomain.com.  But what happens if a DNS alias record (CNAME record) is used?  Lets say now that the actual &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/1472&quot;&gt;&lt;acronym title=&quot;1. In a network or distributed processing environment, the name used to identify the computer that provides services to other computers or terminals that can access the network.2. In the Domain Name System (DNS), a unique name associated with an IP address. A hostname cannot contain a space, tab, number sign (#), or end-of-line character.&quot;&gt;hostname&lt;/acronym&gt;&lt;/a&gt; of the &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2314&quot;&gt;&lt;acronym title=&quot;A powerful computer running software that supplies network clients with services, such as file, print, communication, or application services. Examples of servers include1. Routing servers, which connect nodes and networks of similar architectures2. Gateway servers, which connect nodes and networks of different architectures by performing protocol conversions3. Terminal servers, print servers, disk servers, and file servers, which provide an interface between compatible peripheral devices on a local area network&quot;&gt;server&lt;/acronym&gt;&lt;/a&gt; acting as the IdS is linux1.appdomain.com and that the DNS record for ids1.appdomain.com is actually a CNAME pointing at linux1.appdomain.com:&lt;/p&gt;
&lt;pre&gt;linux1.appdomain.com. 		IN A		10.1.1.1
ids1.appdomain.com.		IN CNAME	linux1.appdomain.com.

&lt;/pre&gt;&lt;p&gt;What happens in this scenario?  When the client builds the SPN, it will look up ids1.appdomain.com which results in the CNAME being returned.  It will then take the actual host record and use that to build the SPN, resulting in:&lt;/p&gt;
&lt;pre&gt;HTTP/&lt;strong&gt;linux1&lt;/strong&gt;.appdomain.com@AD.APPDOMAIN.COM

&lt;/pre&gt;&lt;p&gt;This will be sent to the domain controller and will obviously fail since the SPN is incorrect, resulting in the &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/517&quot;&gt;&lt;acronym title=&quot;1. Software used to explore or navigate. For example, a Web browser (such as Firefox or Internet Explorer) allows a user to access pages on the World Wide Web; a NetWare Administrator browser window allows a user to access the eDirectory tree. Web browsers with a particular encryption capability called Secure Socket Layer (SSL) are sometimes called SSL browsers.2. In the Common Desktop Environment (CDE) Application Builder, a window that provides a symbolic, hierarchical view of a module in a user interface. The browser shows parent-child relationships and groups. It can also be used to find objects in complex modules and to edit a user interface.&quot;&gt;browser&lt;/acronym&gt;&lt;/a&gt; being presented with a basic authentication &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/549&quot;&gt;&lt;acronym title=&quot;A small temporary window which appears on the computer screen which requires you to perform an action or select an option, or that provides you with information. For example, dialog boxes ask you questions like, &quot;Do you want to save this document?&quot; or &quot;Are you sure that you want to exit this program?&quot;After the information has been provided, the user can close the box by clicking &#039;okay,&#039; &#039;cancel,&#039; &#039;yes,&#039; or &#039;no.&#039;&quot;&gt;dialog box&lt;/acronym&gt;&lt;/a&gt; (the IdS falls back to NTLM authentication).  &lt;/p&gt;
&lt;p&gt;The preferred solution to this problem is to put in a second host entry for the IdS, not a CNAME:&lt;/p&gt;
&lt;pre&gt;linux1.appdomain.com. 		IN A		10.1.1.1
ids1.appdomain.com.		IN A		10.1.1.1&lt;/pre&gt;&lt;p&gt;This would result in a host record being returned to the client when it looks up ids1.appdomain.com and that is the value that would be used to build the SPN.  However, there are situations where it may not be possible to enter another host record in DNS.  For example, some fault tolerant layer-4 switching solutions provide for management of DNS entries as well in order to support disaster recovery scenarios (such as F5 Networks’ Global Traffic Manager).  In this case, the switch may be managing and changing the DNS entries for the virtual IP addresses.  Some organizations might use a dedicated or unique zone name for this and therefore have all application names referencing the switch managed entries thorough DNS aliases.  In this case, a CNAME must be used.&lt;/p&gt;
&lt;p&gt;This will work with Access Manager as long as the true, resolvable, host entry is used for the SPN.  So in this example, if a CNAME is used for ids1, the value of linux1.appdomain.com would need to be used for the user ID in AD, in the Kerberos class properties (see figure 1), and in the bcsLogin.conf on the IdS server as shown below:&lt;/p&gt;
&lt;pre&gt;
com.sun.security.jgss.accept {
com.sun.security.auth.module.Krb5LoginModule required
debug=&quot;true&quot;
useTicketCache=&quot;true&quot;
ticketCache=&quot;/opt/novell/java/jre/lib/security/spnegoTicket.cache&quot;
doNotPrompt=&quot;true&quot;
&lt;strong&gt;principal=&quot;HTTP/linux1.appdomain.com@AD.APPDOMAIN.COM&quot;&lt;/strong&gt;
useKeyTab=&quot;true&quot;
keyTab=&quot;/opt/novell/java/jre/lib/security/nidpkey.keytab&quot;
storeKey=&quot;true&quot;;
};

&lt;/pre&gt;&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u5193/AM_Kerberos_Class_Config.png&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u5193/AM_Kerberos_Class_Config_0.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Figure 1: Kerberos Class Properties&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u5193/AM_Kerberos_Class_Config.png&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;However, the URL listed in the local trusted site list in the browser must still be the actual IdS base URL (ids1.appdomain.com in this example), not the true hostname as referenced in the A record.&lt;/p&gt;
&lt;p&gt;Using the Kerberos feature in Access Manager is a great way to provide seamless single sign-on to Windows desktops.  But it is important to understand how the client is resolving the IdS and building the SPN in order to ensure it functions reliably.&lt;/p&gt;
 &lt;div class=&quot;og_rss_groups&quot;&gt;&lt;ul class=&quot;links&quot;&gt;&lt;li class=&quot;first last og_links&quot;&gt;&lt;a href=&quot;/communities/coolsolutions&quot; class=&quot;og_links&quot;&gt;Cool Solutions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description>
 <comments>http://www.novell.com/communities/node/9220/using-dns-aliases-spnego#comments</comments>
 <category domain="http://www.novell.com/communities/product/access+manager">Access Manager</category>
 <category domain="http://www.novell.com/communities/content-type/tip">Tip</category>
 <category domain="http://www.novell.com/communities/topic/kerberos">Kerberos</category>
 <group domain="http://www.novell.com/communities/coolsolutions/ism" xmlns="http://drupal.org/project/og">Identity &amp;amp; Security Management Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions" xmlns="http://drupal.org/project/og">Cool Solutions</group>
 <pubDate>Fri, 06 Nov 2009 16:46:56 -0700</pubDate>
 <dc:creator>matt</dc:creator>
 <guid isPermaLink="false">9220 at http://www.novell.com/communities</guid>
</item>
<item>
 <title>Webinar - The Novell Integrated Help Desk and Free BrainShare passes for eligible purchases</title>
 <link>http://www.novell.com/communities/node/9241/webinar-novell-integrated-help-desk-and-free-brainshare-passes-eligible-purchases</link>
 <description> &lt;p&gt;Are you planning on attending BrainShare this year and can&#039;t quite get the budget to attend? Are you in need of a help desk that integrates with your Novell environment? GroupLink would like to help you out!&lt;/p&gt;
&lt;p&gt;GroupLink&#039;s everything HelpDesk solution, the Novell Integrated Help Desk Solution, features critical Novell integration:&lt;/p&gt;
&lt;p&gt;- Schedule appointments, tasks and receive email notifications with GroupWise email and calendaring integration&lt;br /&gt;
- Manage your assests with NEW! powerful ZEN 10 integration&lt;br /&gt;
- Authenticate your users with essential &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/3276&quot;&gt;&lt;acronym title=&quot;A distributed, replicated naming service that maintains information about and provides access to a list of objects that represent network resources, such as network users, servers, printers, print queues, and applications. The directory is physically stored as a set of database files on a server. If the server hosts file system volumes, these files are on volume sys:. If no volumes are present, the directory is stored on the server&#039;s local disk. eDirectory tightly integrates Novell Security Services for e-commerce (PKI, cryptography, and authentication services), allowing developers to build applications that can be accessed and managed across the entire network through explicit policies.&quot;&gt;eDirectory&lt;/acronym&gt;&lt;/a&gt; integration&lt;br /&gt;
- Lower overall costs by leveraging your current Novell technology&lt;/p&gt;
&lt;p&gt;If you purchase at least 3 technician licenses of everything HelpDesk before the end of the year, you will receive a free BrainShare pass*. To kick off this great promotion and to learn more about how this solution can benefit your organization we have planned a special webinar. This webinar will feature Angie Veach, from Carrol Consolidated School Corp. She will discuss how this Novell integration has helped her organization be more effective and lower overall costs.&lt;/p&gt;
&lt;p&gt;Date: December 3&lt;br /&gt;
Time: 11:00 am Eastern&lt;br /&gt;
Link: &lt;a href=&quot;http://www.grouplink.net/redir.asp?id=2009102902&quot; title=&quot;http://www.grouplink.net/redir.asp?id=2009102902&quot;&gt;http://www.grouplink.net/redir.asp?id=2009102902&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;* of for new customers only, cannot be combined with any other promotion or discount.&lt;/p&gt;
 &lt;div class=&quot;og_rss_groups&quot;&gt;&lt;ul class=&quot;links&quot;&gt;&lt;li class=&quot;first last og_links&quot;&gt;&lt;a href=&quot;/communities/coolsolutions&quot; class=&quot;og_links&quot;&gt;Cool Solutions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description>
 <comments>http://www.novell.com/communities/node/9241/webinar-novell-integrated-help-desk-and-free-brainshare-passes-eligible-purchases#comments</comments>
 <category domain="http://www.novell.com/communities/coolsolutions/edirectory">eDirectory</category>
 <category domain="http://www.novell.com/communities/taxonomy/term/1">GroupWise</category>
 <category domain="http://www.novell.com/communities/coolsolutions/sled">SUSE Linux Enterprise Desktop</category>
 <category domain="http://www.novell.com/communities/product/suse+linux+enterprise+server">SUSE Linux Enterprise Server</category>
 <category domain="http://www.novell.com/communities/taxonomy/term/26">ZENworks</category>
 <category domain="http://www.novell.com/communities/topic/brainshare">BrainShare</category>
 <category domain="http://www.novell.com/communities/topic/partners">Partners</category>
 <category domain="http://www.novell.com/communities/topic/training">Training</category>
 <group domain="http://www.novell.com/communities/coolsolutions/zenworks" xmlns="http://drupal.org/project/og">ZENworks Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/workgroup" xmlns="http://drupal.org/project/og">Workgroup Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/ism" xmlns="http://drupal.org/project/og">Identity &amp;amp; Security Management Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/gwmag" xmlns="http://drupal.org/project/og">GroupWise Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions" xmlns="http://drupal.org/project/og">Cool Solutions</group>
 <pubDate>Fri, 06 Nov 2009 14:07:51 -0700</pubDate>
 <dc:creator>GroupLink1</dc:creator>
 <guid isPermaLink="false">9241 at http://www.novell.com/communities</guid>
</item>
<item>
 <title>Early Bird Discount: Save $300 on BrainShare</title>
 <link>http://www.novell.com/communities/node/9240/early-bird-discount-save-300-brainshare</link>
 <description> &lt;p&gt;Novell has taken steps to make BrainShare more affordable by dropping the full price of the conference from US$1,895.00 to US$1,695.00. You can save an additional $300 with the &quot;early bird&quot; registration. The &quot;early bird&quot; rate of US$1,395.00 will be available until February 19, 2010. Learn more at &lt;a href=&quot;http://www.novell.com/brainshare&quot; title=&quot;http://www.novell.com/brainshare&quot;&gt;http://www.novell.com/brainshare&lt;/a&gt;&lt;/p&gt;
 &lt;div class=&quot;og_rss_groups&quot;&gt;&lt;ul class=&quot;links&quot;&gt;&lt;li class=&quot;first last og_links&quot;&gt;&lt;a href=&quot;/communities/coolsolutions&quot; class=&quot;og_links&quot;&gt;Cool Solutions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description>
 <comments>http://www.novell.com/communities/node/9240/early-bird-discount-save-300-brainshare#comments</comments>
 <category domain="http://www.novell.com/communities/topic/brainshare-2010">BrainShare 2010</category>
 <group domain="http://www.novell.com/communities/coolsolutions/zenworks" xmlns="http://drupal.org/project/og">ZENworks Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/workgroup" xmlns="http://drupal.org/project/og">Workgroup Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/ntc" xmlns="http://drupal.org/project/og">Teaming &amp;amp; Conferencing Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/slemag" xmlns="http://drupal.org/project/og">SUSE Linux Enterprise Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/ism" xmlns="http://drupal.org/project/og">Identity &amp;amp; Security Management Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/gwmag" xmlns="http://drupal.org/project/og">GroupWise Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions" xmlns="http://drupal.org/project/og">Cool Solutions</group>
 <pubDate>Fri, 06 Nov 2009 13:31:43 -0700</pubDate>
 <dc:creator>mattclayton</dc:creator>
 <guid isPermaLink="false">9240 at http://www.novell.com/communities</guid>
</item>
<item>
 <title>Example walk through of using XPATH in Identity Manager</title>
 <link>http://www.novell.com/communities/node/9214/example-walk-through-using-xpath-identity-manager</link>
 <description> &lt;p&gt;&lt;b&gt;Example of using XPATH in Identity Manager:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Novell Identity Manager originally started as Novell DirXML and required all work to be done in XSLT (XML Style sheets).  XSLT is powerful language but not my personal favorite to work in. &lt;/p&gt;
&lt;p&gt;With the release of Novell NSure Identity Manager 2.0 we saw the advent of DirXML Script an XML based language designed for the task of managing XML event documents.  With each release of Identity Manager since, it has gotten better and better. &lt;/p&gt;
&lt;p&gt;Just for the heck of it, I even wrote this article trying to track down what you can only do in XSLT at the moment, with the goal of chipping away at that list, where possible!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/node/3279/open-call-what-can-you-do-xslt-you-cannot-do-dirxml-script&quot;&gt;Open Call: What Can You Do in XSLT that You Cannot Do in DirXML Script?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There have been new features that make life a lot easier, and new tokens that are very powerful. &lt;/p&gt;
&lt;p&gt;The nicest thing about using DirXML Script is that the management tools, &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2869&quot;&gt;&lt;acronym title=&quot;Novell iManagerA browser-based management utility included with NetWare 6. In ZENworks Server Management, it enables administrators to manage Tiered Electronic Distribution (TED) objects, agents, and processes from any location where the required version of Internet Explorer is available.&quot;&gt;iManager&lt;/acronym&gt;&lt;/a&gt; with the Identity Manager snapins, or Designer for Identity Manager (an Eclipse based tool for offline editing of a project) &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/633&quot;&gt;&lt;acronym title=&quot;To break down a string of information such as a command or file into its constituent parts.&quot;&gt;parse&lt;/acronym&gt;&lt;/a&gt; the XML into a really nice GUI interface that allows you to type it free form in XML, manipulate it in a GUI, or any combination of both.  In fact, sometimes, due to the way nested items (if then code blocks, or for each loops) are shown in the GUI it is easier to fix things by switching over to the XML view and working there.&lt;/p&gt;
&lt;p&gt;Some examples of the various tokens and things that can be done with DirXML Script are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6178/new-idm-36-enhancement-do-find-matching-objec&quot;&gt;New IDM 3.6 enhancement to do-find-matching-object&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/5687/examples-using-parsedn-token-identity-manager&quot;&gt;Examples of using the ParseDN Token in Identity Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/5818/different-attribute-options-identity-manager&quot;&gt;The different attribute options in Identity Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/5920/ism-more-thoughts-sourcedestinationoperation-attribute-tokens-identity-manager&quot;&gt;More thoughts on Source/Destination/Operation attribute tokens in Identity Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/4906/the-query-token-identity-manager&quot;&gt;The Query token in Identity Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/2209/unique-name-token-functionality-idm-35&quot;&gt;Unique Name Token Functionality in IDM 3.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/3034/reformat-operation-attribute&quot;&gt;Reformat Operation Attribute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/2572/using-time-tokens-idm-35&quot;&gt;Using the Time Tokens in IDM 3.5 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/1903/idm-35-update-new-features&quot;&gt;IDM 3.5 - Update on New Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/2198/troubleshooting-if-then-else-blocks-idm-code&quot;&gt;Troubleshooting IF-THEN-ELSE Blocks with IDM Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/4844/mapping-tables-and-render-browsed-dn-relative-policy-option&quot;&gt;Mapping tables and Render browsed DN relative to policy option&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of the languages that has been available inside XSLT and DirXML Script is called XPATH, the XML Path language, which is described here: &lt;a href=&quot;http://www.w3.org/TR/1999/REC-xpath-19991116&quot;&gt;http://www.w3.org/TR/1999/REC-xpath-19991116&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;However there is just not enough out there in terms of how to use XPATH in an Identity Manager context for people learning Identity Manager. &lt;/p&gt;
&lt;p&gt;I have been working hard on that topic, and you can read some of my articles on the topic at:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;XPATH General Concepts:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/4833/some-thoughts-xpath-novell-identity-manager&quot;&gt;Some thoughts on XPATH in Novell Identity Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6175/xpath-and-context-node&quot;&gt;XPATH and the context node&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6109/xpath-and-math&quot;&gt;XPATH and math&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6179/using-string-compares-xpath-statements&quot;&gt;Using String Compares in XPATH Statements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6910/another-attempt-explaining-xpath-context-node&quot;&gt;Another attempt at explaining the XPATH Context Node&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;XPATH Cool tips:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/5845/using-xpath-examine-association-values&quot;&gt;Using XPATH to examine Association values&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/5686/cool-tricks-using-xpath-nodesets&quot;&gt;Cool tricks using XPATH on nodesets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/4825/using-global-configuration-values-xpath&quot;&gt;Using Global Configuration Values in XPATH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6276/using-xpath-get-position-node-node-set&quot;&gt;Using XPATH to Get the Position of a Node in a Node Set&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I keep my eyes open as I work in Identity Manager for good examples of XPATH usage that might be handy to others, and this one happened to me today.  I walked one of my coworkers through it, who is still learning XPATH, and realized it would be a great example to write an article about the process of debugging what I wanted to do.&lt;/p&gt;
&lt;p&gt;For those who do not know, Designer has an XPATH tool built in.  It is not perfect, we are told in the forums that there is one or two major issues that make it not 100% complaint with the way Identity Manager views XPATH, but for 99% of the things you need to do in XPATH in Identity Manager it should be fine.&lt;/p&gt;
&lt;p&gt;Whenever you use an XPATH related token (strip by XPATH expression, if XPATH expression condition token, clone by XPATH expression, or the XPATH token in Argument Builder) you get a little icon to the right of the text box, that pops open the XPATH tool.  &lt;/p&gt;
&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;I will try and include some screen shots to make it clear what I mean, where it makes sense. &lt;/p&gt;
&lt;p&gt;So what problem was I working on?  Well we are syncing POSIX attributes (that is uidNumber, gidNumber, gecos, homeDirectory, loginShell and so on) between two trees.  However, the posixAccount auxiliary class that often is used to contain the POSIX attributes that Unix and Linux need to define a user, has some mandatory values.&lt;/p&gt;
&lt;p&gt;On a side note, it is a really bad idea in general to make an Auxiliary class have mandatory attributes.  It makes it a ROYAL pain to work with!  You cannot just add the class to an object by editing say Object Class, in Console One, since you need to save that change, before the UI will let you add one of the new attributes, but if the new attribute is mandatory, you cannot add the Object Class value without the mandatory attribute!&lt;/p&gt;
&lt;p&gt;I do not dispute the logic behind this specific case, since it makes little sense to have just uidNumber without gidNumber, from a Unix &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2314&quot;&gt;&lt;acronym title=&quot;A powerful computer running software that supplies network clients with services, such as file, print, communication, or application services. Examples of servers include1. Routing servers, which connect nodes and networks of similar architectures2. Gateway servers, which connect nodes and networks of different architectures by performing protocol conversions3. Terminal servers, print servers, disk servers, and file servers, which provide an interface between compatible peripheral devices on a local area network&quot;&gt;server&lt;/acronym&gt;&lt;/a&gt; perspective, nonetheless it is really annoying.&lt;/p&gt;
&lt;p&gt;Now in this particular tree, somehow the base class User got extended with the needed posixAccount attributes.  Thus when we originally set this up and populated the tree, all was good, as we could add the POSIX attributes without problem to users in either tree.  It was just part of base schema, no need for a posixAccount attribute.&lt;/p&gt;
&lt;p&gt;Then things got strange.  We found that some &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/1613&quot;&gt;&lt;acronym title=&quot;Lightweight Directory Access ProtocolAn X.500-related Open Systems Interconnection (OSI) protocol that clients can use to read and write Directory information. LDAP is used to publish Directory information such as telephone numbers and e-mail addresses. The Directory features available to LDAP clients are dependent upon the features built into the LDAP server and the LDAP client; some clients have the ability to read and write data; others can only read Directory data.Web browsers and e-mail programs can query an LDAP-compliant directory (for example, Novell eDirectory).LDAP allows a client to search through a large database of addresses, phone numbers, and people stored on a server.&quot;&gt;LDAP&lt;/acronym&gt;&lt;/a&gt; applications, I think it was &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/3269&quot;&gt;&lt;acronym title=&quot;Advanced Interactive ExecutiveAn IBM version of the UNIX operating system.&quot;&gt;AIX&lt;/acronym&gt;&lt;/a&gt;&#039;s equivalent to PAM on Linux, (Pluggable Authentication Modules, which I was sure AIX called LAM, but the AIX guy says he has never heard of that, not that it matters) when doing an LDAP bind to get user information we found that &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/3288&quot;&gt;&lt;acronym title=&quot;Novell Modular Authentication ServiceA flexible and expandable login framework that provides developers the ability to integrate multiple authentication services using eDirectory systems. NMAS works with the Graded Authentication.&quot;&gt;NMAS&lt;/acronym&gt;&lt;/a&gt; was throwing a strange failure error, and it looks like you explicitly require the posixAccount &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/1955&quot;&gt;&lt;acronym title=&quot;The structure that the network administrator chooses and provides with data in order to create a Novell Directory Services (NDS) object. The types of object classes are the same as the names of the objects themselves. For example, User, Organization, Server, etc.&quot;&gt;object class&lt;/acronym&gt;&lt;/a&gt; on the user for it to work.  It is not enough to just have all the needed attribute, even though the query does not look for posixAccount.  But if the object class does not include posixAccount it does not work.  Crazy, but easy to fix.  &lt;/p&gt;
&lt;p&gt;Thus to fix it, we started adding posixAccount to users.   However, we had a couple of edge cases where we should not have been sending it and I wanted to strip out the add object class for posixAccount.  Usually when we are missing one of the POSIX attributes, in which case the entire event fails with a 609 Missing Mandatory error.  (Because we are missing a mandatory attribute, that posixAccount requires) &lt;/p&gt;
&lt;p&gt;Well you say, thats easy, that is what the token, strip operational attribute is for.  Just do a strip operational attribute Object Class, and all will be fine.&lt;/p&gt;
&lt;p&gt;Well there are way more instances where this might occur, and in fact there are legal cases where there might be several object class changes in one document, so what I really want is just to strip the specific object class add value of posixAccount.&lt;/p&gt;
&lt;p&gt;Well thats what strip by XPATH expression is for.  So what is my XPATH expression to remove the add of the value posixAccount into the Object Class attribute.&lt;/p&gt;
&lt;p&gt;Off the top of my head, I tried the following XPATH statement:&lt;/p&gt;
&lt;pre&gt;modify-attr/add-attr[@attr-name=&quot;Object Class&#039; and value/text()=&quot;posixAccount]

&lt;/pre&gt;&lt;p&gt;I opened it in the XPATH editor, (here is what it looks like empty) &lt;/p&gt;
&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder2.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder2_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder2.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;and tracked down an example event document, to paste into the sample document on the left hand side in the XML source tab:&lt;/p&gt;
&lt;pre&gt;&amp;lt;nds dtdversion=&quot;3.5&quot; ndsversion=&quot;8.x&quot;&amp;gt;
  &amp;lt;source&amp;gt;
    &amp;lt;product version=&quot;3.6.1.4427&quot;&amp;gt;DirXML&amp;lt;/product&amp;gt;
    &amp;lt;contact&amp;gt;Novell, Inc.&amp;lt;/contact&amp;gt;
  &amp;lt;/source&amp;gt;
  &amp;lt;input&amp;gt;
    &amp;lt;modify cached-time=&quot;20091029133625.703Z&quot; class-name=&quot;User&quot; dest-dn=&quot;corp\acme\americas\Test Users\LDAPTEST&quot; dest-entry-id=&quot;37551&quot; event-id=&quot;AMERICAS-AD##124a0832994##0&quot; qualified-src-dn=&quot;O=acme\OU=Users\CN=LDAPTEST&quot; src-dn=&quot;\acme-IDV\acme\Users\LDAPTEST&quot; src-entry-id=&quot;38906&quot;
 timestamp=&quot;1256823385#2&quot;&amp;gt;
      &amp;lt;association state=&quot;associated&quot;&amp;gt;{2F95C242-557F-3c40-A3B8-2F95C242557F}&amp;lt;/association&amp;gt;
      &amp;lt;modify-attr attr-name=&quot;userPrincipalName&quot;&amp;gt;
        &amp;lt;remove-all-values/&amp;gt;
        &amp;lt;add-value&amp;gt;
          &amp;lt;value timestamp=&quot;1256823385#2&quot; type=&quot;string&quot;&amp;gt;LDAPTEST@acme.corp&amp;lt;/value&amp;gt;
        &amp;lt;/add-value&amp;gt;
      &amp;lt;/modify-attr&amp;gt;
      &amp;lt;modify-attr attr-name=&quot;Object Class&quot;&amp;gt;
        &amp;lt;add-value&amp;gt;
          &amp;lt;value&amp;gt;posixAccount&amp;lt;/value&amp;gt;
        &amp;lt;/add-value&amp;gt;
      &amp;lt;/modify-attr&amp;gt;
    &amp;lt;/modify&amp;gt;
  &amp;lt;/input&amp;gt;
&amp;lt;/nds&amp;gt;

&lt;/pre&gt;&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder3.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder3_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder3.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;Before we start using the XPATH editor for real, lets make sure we can get it to work at all!  So lets try a simple common XPATH selection.  Lets select the src-dn XML attribute of the &amp;lt;modify&amp;gt; node.  With XPATH, you can do a couple of very different things, which sometimes gets confusing, and the different uses depend on the context of tier use, which makes it more confusing. &lt;/p&gt;
&lt;p&gt;Basically you can use XPATH to select a node, value, or attribute.  That is the sort of thing you do in a set local variable kind of context.  Makes sense, you want to set a variable to something in the event document.  &lt;/p&gt;
&lt;p&gt;Conversely you also can use XPATH to do math, and some string functions, in which case, you might also in a set local variable context try to add 86400 seconds to a Time value, to set the value to tomorrows time.  erPrincipalName&quot;] but wanted the value before the @ sign.  Well you could combine the two into something like substring-before( attr[@attr-name=&quot;userPrincipalName&quot;], &quot;@&quot;) to get what you wanted.&lt;/p&gt;
&lt;p&gt;Back to our example, lets make sure we can get the XPATH editor working with a simple test or two, starting with our @src-dn, which KNOW will work, since it is the most common example used in Identity Manager. &lt;/p&gt;
&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder4.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder4_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder4.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Ok, so I have my event doc on the left hand side, looks good, type in @src-dn as my expression, hit the arrow button to Go, and no nodes are found.  What the dickens?  &lt;/p&gt;
&lt;p&gt;Well this stymied me for the longest time, and I just assumed this was broken, but it is really the simplest thing to resolve.  The XPATH editor is a very generic XPATH editor.  Identity Manager is a specific XPATH usage case, and it all comes down to the context node! &lt;/p&gt;
&lt;p&gt;Its almost as easy to show it, as it to explain it...  Look at this screen shot:  &lt;/p&gt;
&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder5.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder5_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder5.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Here you can see I switched over to the XML Tree view on the left has side.  The most important thing is I clicked on the Modify node.  This sets the &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/1191&quot;&gt;&lt;acronym title=&quot;A user&#039;s current location in an eDirectory tree, as reported by the Novell Client software.&quot;&gt;current context&lt;/acronym&gt;&lt;/a&gt; to the modify node (Which the XPATH Select Context bit on the right says is now /nds/input/modify) which is the default context in an Identity Manager example.  Now suddenly we see a result!  Once you do this, it starts being a really useful tool!&lt;/p&gt;
&lt;p&gt;Back to my actual example now, and I had thought that this ought to be close:&lt;/p&gt;
&lt;pre&gt;modify-attr/add-attr[@attr-name=&quot;Object Class&#039; and value/text()=&quot;posixAccount]

&lt;/pre&gt;&lt;p&gt;Well first thing the editor complained about where my typos.  Miss matched the &quot; and &#039; around the Object Class, and missed a close &quot; at the end of posixAccount.&lt;/p&gt;
&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder6.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder6_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder6.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;That left me with: &lt;/p&gt;
&lt;pre&gt;modify-attr/add-attr[@attr-name=&quot;Object Class&quot; and value/text()=&quot;posixAccount&quot;]

&lt;/pre&gt;&lt;p&gt;I switched the left hand pane to the tree node view of the sample XML event document and start looking at the actual document, and I realized my memory stinks! &lt;/p&gt;
&lt;p&gt;First off, I got an &amp;lt;add&amp;gt; and &amp;lt;modify&amp;gt; event mixed up.  In an &amp;lt;add&amp;gt; event, you get add-attr nodes, with an attr-name attribute, and then an add-value node and then a value node, or something like that.  But in a modify, you get a modify-attr node, with an XML attribute of attr-name and then an add-value or remove-value (or remove-all-values) node under that, followed by a value node.  &lt;/p&gt;
&lt;p&gt;Thus no need for the add-attr, and the predicate (the stuff in square brackets []) needs to be on the modify-attr node.&lt;/p&gt;
&lt;p&gt;That gets me closer with:&lt;/p&gt;
&lt;pre&gt;modify-attr[@attr-name=&quot;Object Class&quot; and value/text()=&quot;posixAccount&quot;]

&lt;/pre&gt;&lt;p&gt;But I get nothing the XPATH Editor, since nothing matches that criteria, and as I looked closer I realized I forgot that there is an add-value node to include in there.  That leads me closer with:&lt;/p&gt;
&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder7.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder7_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder7.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;pre&gt;modify-attr[@attr-name=&quot;Object Class&quot;]/add-value/value=&quot;posixAccount&quot;]

&lt;/pre&gt;&lt;p&gt;But there is an error at the end I am told.  Oops, left a trailing ] and then I take that off and still an error. &lt;/p&gt;
&lt;p&gt;Well I think I need to put a predicate on the add-value test, so that it looks more like:&lt;/p&gt;
&lt;pre&gt;modify-attr[@attr-name=&quot;Object Class&quot;]/add-value[value/text()=&quot;posixAccount&quot;]

&lt;/pre&gt;&lt;p&gt;So lets parse that out.  Select the modify-attr node that matches the condition where the XML attribute attr-name is equal to the string &quot;Object Class&quot; and then under that node, lets select a add-value node, who has a value whose text string is equal to &quot;posixAccount&quot;.&lt;/p&gt;
&lt;p&gt;Now you can see the in the XPATH editor what it should look like: &lt;/p&gt;
&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder8.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder8_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u555/XPathArgBuilder8.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;I switched tabs over to the XML Source view, since in this case it is more useful when looking at results.  Then you can see on the right hand side the XPATH Selected Context is still /nds/input/modify, which is what we want, and the XPATH expression is what I typed above, and in the results section, it selected an element, lines 16-18.  &lt;/p&gt;
&lt;p&gt;Look over the to the left hand side, and you can see that lines 16-18 is the &amp;lt;add-value&amp;gt; node to the close version of &amp;lt;/add-value&amp;gt;.  In this case I selected a node set, and it since what I originally wanted was to strip this out by XPATH, that looks to be what I wanted.  This way if there is more than one Object class change, I will only remove this one node, and it is the only one, it leaves an empty modify-attr node, which usually gets cleaned up by the engine.&lt;/p&gt;
&lt;p&gt;Tada.  See was that so hard?  Well yes, a little bit, but it gets a lot easier as you do it more often, and get better at it.  &lt;/p&gt;
 &lt;div class=&quot;og_rss_groups&quot;&gt;&lt;ul class=&quot;links&quot;&gt;&lt;li class=&quot;first last og_links&quot;&gt;&lt;a href=&quot;/communities/coolsolutions&quot; class=&quot;og_links&quot;&gt;Cool Solutions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description>
 <comments>http://www.novell.com/communities/node/9214/example-walk-through-using-xpath-identity-manager#comments</comments>
 <category domain="http://www.novell.com/communities/taxonomy/term/6">DirXML</category>
 <category domain="http://www.novell.com/communities/coolsolutions/edirectory">eDirectory</category>
 <category domain="http://www.novell.com/communities/coolsolutions/nim">Identity Manager</category>
 <category domain="http://www.novell.com/communities/product/identitymanager/identitymanager35">Identity Manager 3.5</category>
 <category domain="http://www.novell.com/communities/topic/xpath">XPATH</category>
 <group domain="http://www.novell.com/communities/coolsolutions/ism" xmlns="http://drupal.org/project/og">Identity &amp;amp; Security Management Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions" xmlns="http://drupal.org/project/og">Cool Solutions</group>
 <pubDate>Fri, 06 Nov 2009 11:41:46 -0700</pubDate>
 <dc:creator>geoffc</dc:creator>
 <guid isPermaLink="false">9214 at http://www.novell.com/communities</guid>
</item>
<item>
 <title>Open Call - IDM Association Values for eDirectory Objects </title>
 <link>http://www.novell.com/communities/node/1696/open-call-idm-association-values-edirectory-objects</link>
 <description> &lt;p&gt;&lt;/p&gt;
&lt;p&gt;Identity Manager stores an association value on each eDirectory object for each connected system.&lt;/p&gt;
&lt;p&gt;The association value is meant to be connected in a system-specific way, and uniquely within it. Each driver handles this slightly differently.&lt;/p&gt;
&lt;p&gt;I think it would be nice to have the complete list. Here are the ones I know about so far. If you know any more, please email &lt;a href=&quot;mailto:geoffreycarman@gmail.com&quot;&gt;me&lt;/a&gt; to add to the list!  Or respond in the comments, or send me a personal message via Cool Solutions.  All will work&lt;/p&gt;
&lt;table border=&quot;1&quot; cellspacing=&quot;2&quot; cellpadding=&quot;2&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Driver&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Association Value&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;eDirectory&lt;/td&gt;
&lt;td&gt;eDirectory GUID value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Active Directory&lt;/td&gt;
&lt;td&gt;Active Directory GUID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lotus Notes &lt;/td&gt;
&lt;td&gt;UNID (Notes Universal ID) (32 char string), see Lothars comments down below for how to find the UNID value within Lotus Notes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GroupWise&lt;/td&gt;
&lt;td&gt;NGW: GroupWise ID, this is a string with three parts, DOM.PO.UserName{xxx}GUIDValue  I do not know what the {xxx} means, nor whose GUID but everybody in a GW system seems to have the same values.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delimited Text&lt;/td&gt;
&lt;td&gt;email address, but you almost always change that&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JDBC&lt;/td&gt;
&lt;td&gt;Primary Key value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PeopleSoft&lt;/td&gt;
&lt;td&gt;EMPLID (eDirs workforceID)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SAP HR&lt;/td&gt;
&lt;td&gt;PERNUM (eDir workForceID) for users, or one letter for object type followed by the OBJID (and leading zeroes are not removed, so an Position&#039;s value might be S00001234)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Older SAP UM&lt;/td&gt;
&lt;td&gt;&quot;USd&quot; followed by the SAP username&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Newer SAP UM&lt;/td&gt;
&lt;td&gt;With the CMP release, the SAP UM driver has a couple more modes.  It still supports the old format, but now uses a new format of \SytemName\USdSAPUSERNAME which is the old value preceeded by the System name.  Docs are &lt;a href=&quot;http://www.novell.com/documentation/ncmp_sap10/sap_user_jco3/?page=/documentation/ncmp_sap10/sap_user_jco3/data/bkbg1x1.html&quot;&gt;here&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bidirectional AS400&lt;/td&gt;
&lt;td&gt;USRPRF in the AS400 (basically the username)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bidirectional Linux/Unix&lt;/td&gt;
&lt;td&gt;usernameUser (Username value followed by literal string &quot;User&quot; no spaces.  Same for groups, just the string is &quot;Group&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bidirectional RACF (Mainframe)&lt;/td&gt;
&lt;td&gt;&quot;USER\userid&quot; or &quot;GROUP\groupid&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bidirectional TopSecret&lt;/td&gt;
&lt;td&gt;eDir CN&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fanout&lt;/td&gt;
&lt;td&gt;GUID of the user or group and then maintains its own &quot;association&quot;, a multi-valued field, one per platform, which is just the &quot;CN&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Loopback/Null&lt;/td&gt;
&lt;td&gt;By default nothing, but you can add whatever you like&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;eXtend Composer shims&lt;/td&gt;
&lt;td&gt;Whatever you set it to be, no default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User Application&lt;/td&gt;
&lt;td&gt;Everybody gets the same value, &quot;AnAssociation&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scripting&lt;/td&gt;
&lt;td&gt;No real default, whatever you set it to be&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LDAP&lt;/td&gt;
&lt;td&gt;LDAP DN of the user, like cn=bob,o=acme&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JMS&lt;/td&gt;
&lt;td&gt;Driver GUID &amp;amp; Message ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avaya PBX&lt;/td&gt;
&lt;td&gt;/DRIVERNAME/workorderCN Time like /Avaya PBX/avaya.test07 01/19/2009 09:24:49:0756&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Work Order&lt;/td&gt;
&lt;td&gt;Workorder driver name, the workorder CN + creation date/timestamp, e.g &quot;\MyWorkorderDriver\MyWorkorder 1/14/2009 15:23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remedy&lt;/td&gt;
&lt;td&gt;Schema name and request ID of the entry&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt; Third Party Drivers&lt;/b&gt;&lt;/p&gt;
&lt;table border=&quot;1&quot; cellspacing=&quot;2&quot; cellpadding=&quot;2&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Third Party Driver&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Association Value&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Apps by &lt;a href=&quot;http://www.concensus.com/google&quot;&gt;Concensus Consulting&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Google Username since it cannot be renamed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://www.novell.com/products/identitymanager/drivers/snapshotv3.html&quot;&gt;Pulsen Snapshot Driver V3&lt;/a&gt; by &lt;a href=&quot;http://www.pulsen.com/snapshot&quot;&gt;Pulsen&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;LDAP: Any attribute value available in the application (including dn).&lt;br /&gt;
ODBC: Any column value available in the result set or a concatenated value from two or more columns (since the association is taken from one column in a result set and not a table it could be anything that a SQL statement can generate).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HL7 Driver from &lt;a href=&quot;http://www.est-grp.com/products.php&quot;&gt;EST Group&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A derived value to insure uniqueness&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Apps Driver from &lt;a href=&quot;http://www.est-grp.com/products.php&quot;&gt;EST Group&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Full domain address of the destination domain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tivoli Access Manager  Driver from &lt;a href=&quot;http://www.est-grp.com/products.php&quot;&gt;EST Group&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Source DN of the object, since there is nothing unique that TAM provides&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Here are the known drivers we are missing values for:&lt;/p&gt;
&lt;table border=&quot;1&quot; cellspacing=&quot;2&quot; cellpadding=&quot;2&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Driver&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Association Value&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOAP&lt;/td&gt;
&lt;td&gt;I imagine it is whatever you set it to be&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SIF&lt;/td&gt;
&lt;td&gt;Never seen this driver, so no idea, anyone?  Bueller, Bueller?&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Did I miss any drivers?  I know there are custom ones out there, so if you know of any let me know!  But also lets focus on Novell provided ones&lt;/p&gt;
&lt;p&gt;Shout out via the comments if you know one that we are missing!  Feel free to email me, or send me a message via Cool Solutions if you would like.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
 &lt;div class=&quot;og_rss_groups&quot;&gt;&lt;ul class=&quot;links&quot;&gt;&lt;li class=&quot;first last og_links&quot;&gt;&lt;a href=&quot;/communities/coolsolutions&quot; class=&quot;og_links&quot;&gt;Cool Solutions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description>
 <comments>http://www.novell.com/communities/node/1696/open-call-idm-association-values-edirectory-objects#comments</comments>
 <category domain="http://www.novell.com/communities/coolsolutions/nim">Identity Manager</category>
 <category domain="http://www.novell.com/communities/content-type/tip">Tip</category>
 <category domain="http://www.novell.com/communities/topic/3rd+party+products">3rd Party Products</category>
 <category domain="http://www.novell.com/communities/taxonomy/term/69">Identity &amp;amp; Security Management</category>
 <group domain="http://www.novell.com/communities/coolsolutions/ism" xmlns="http://drupal.org/project/og">Identity &amp;amp; Security Management Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions" xmlns="http://drupal.org/project/og">Cool Solutions</group>
 <pubDate>Fri, 06 Nov 2009 06:50:36 -0700</pubDate>
 <dc:creator>geoffc</dc:creator>
 <guid isPermaLink="false">1696 at http://www.novell.com/communities</guid>
</item>
<item>
 <title>Using jQuery in Identity Manager Roles Based Provisioning Module Workflow Forms</title>
 <link>http://www.novell.com/communities/node/9210/using-jquery-identity-manager-roles-based-provisioning-module-workflow-forms</link>
 <description> &lt;p&gt;Please see the attached UseJQuery.pdf document and sample Provisioning Request Definition.  It will be necessary to rename JQuery-CoolSolution.xml.txt to JQuery-CoolSolution.xml before it can be loaded into the Designer.&lt;/p&gt;
&lt;h3&gt;Using jQuery in Identity Manager Roles Based Provisioning Module Workflow Forms&lt;/h3&gt;
&lt;p&gt;by Joe Craddock, Bess Siegal, Steve Williams&lt;/p&gt;
&lt;h3&gt;Introduction&lt;/h3&gt;
&lt;p&gt;For increased styling, layout, and functionality flexibility, jQuery can be employed to greatly enhance your workflow request and approval forms. Two examples are outlined in this document. A Simple Example shows and hides blocks of fields using CSS and injects labels to the right of some fields. An Advanced Example creates tabs, places controls / fields on the tabs, and inserts a Google Map for obtaining latitude and longitude coordinates.&lt;/p&gt;
&lt;h3&gt;A. Simple Example&lt;/h3&gt;
&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u10635/9210-1.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u10635/9210-1_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Figure A1&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u10635/9210-1.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;This is a sample workflow request form, comprised of two (2) sections, &quot;Personal Information&quot; and &quot;Work Information.&quot; A true/false Radio Button control toggles the appearance of the &quot;Work Information&quot; section. It addresses some customers&#039; specific needs, namely:&lt;/p&gt;
&lt;ol class=&quot;spread&quot;&gt;
&lt;li&gt; Include an image logo in the first column, such as a PeopleSoft icon when the workflow request is for access to PeopleSoft. In this example the Novell logo appears (does not require jQuery).&lt;/li&gt;
&lt;li&gt; Include two (2) labels for a single control, such as English to the left of the field and Hebrew to the right of the field. In this example German labels are included for certain fields.&lt;/li&gt;
&lt;li&gt; Hide and show blocks of fields using CSS.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Fields&lt;/h3&gt;
&lt;p&gt;The fields of the workflow form are shown in Figure A2.&lt;/p&gt;
&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u10635/9210-2.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u10635/9210-2_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Figure A2&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u10635/9210-2.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Custom CSS class names have been applied to each control and label in the following manner:&lt;/p&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Radio Button elements&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;CSS class names&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Field CCS class name(s) &lt;/td&gt;
&lt;td&gt;cust-radio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Label CCS class name(s) &lt;/td&gt;
&lt;td&gt;cust-radio-label&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Personal Information elements&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;CSS class names&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Field CCS class name(s) &lt;/td&gt;
&lt;td&gt;cust-personal cust-field&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Label CCS class name(s) &lt;/td&gt;
&lt;td&gt;cust-label&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Work Information elements &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;CSS class names&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Field CCS class name(s) &lt;/td&gt;
&lt;td&gt;cust-job cust-field&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Label CCS class name(s) &lt;/td&gt;
&lt;td&gt;cust-label&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The following lines of CSS can be added to theme.css of the custom theme, or you may add them as internal CSS using the &quot;counter-wrapping&quot; technique outlined in the Advanced Example (see Inclusion of jQuery UI CSS Framework).&lt;/p&gt;
&lt;pre&gt;.cust-personal{
}
.cust-field{
font-size: 10px;
}
.cust-label{
font-weight: bold;
font-size: 12px;
white-space: nowrap;
}
.cust-deLabel {
font-size: 12px;
font-style: italic;
padding-left: 5px;
}
.cust-job{
}
.cust-radio-label {
font-weight: bold;
font-size: 12px;
white-space: nowrap;
background-image: url(images/N_logo_22.png);
background-position: 0px 0px;
background-repeat: no-repeat;
height:30px;
padding-left:20px;
padding-top:3px;
}
.cust-radio {
font-size: 12px;
}
.cust-radio input {
width: 1em;
margin-left: 3em;
text-align: left;
}

&lt;/pre&gt;&lt;div class=&quot;callout&quot;&gt;&lt;b&gt;Note:&lt;/b&gt; If the inline script option is used then the following line needs to be changed&lt;br /&gt;
&lt;b&gt;from:&lt;/b&gt; background-image: url(images/N_logo_22.png);&lt;br /&gt;
&lt;b&gt;to:&lt;/b&gt; background-image: url(resource/themes/Neptune/images/N_logo_22.png);&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Scripts&lt;/h3&gt;
&lt;p&gt;All the jQuery injection is done from the Scripts tab of the Forms tab (see Figure A3) in Designer.&lt;/p&gt;
&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u10635/9210-3.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u10635/9210-3_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Figure A3&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u10635/9210-3.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Logo&lt;/h3&gt;
&lt;p&gt;The Novell logo appears next to the radio button label by specifying the cust-radio-label class name as described above.&lt;/p&gt;
&lt;h3&gt;jQuery&lt;/h3&gt;
&lt;p&gt;External script with Id of &quot;Script&quot; is the google library to load jQuery. It&#039;s value is:&lt;br /&gt;
&lt;a href=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;&gt;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Hide/Show &quot;Work Information&quot;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Inline Script&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Inline script with Id of &quot;Script1&quot; is the simple jQuery to hide or show fields and labels that have the &quot;cust-job&quot; class or the &quot;headingcust&quot; ID. &quot;Script1&quot; is below:&lt;/p&gt;
&lt;pre&gt;//Show/Hide &#039;job&#039; related fields
function showWork(show)
{
$(&quot;.cust-job&quot;).each(function() {
var td = $(this).parent();
var tr = td.parent();
if (show) {
tr.show();
$(&quot;#_headingjob&quot;).show();
} else {
tr.hide();
$(&quot;#_headingjob&quot;).hide();
}
});
//show/hide tr holding field with class-name &quot;cust-job&quot;
//since whole tr gets hidden with display:none anyway
//title cannot have custom class, so get it by ID
}

&lt;/pre&gt;&lt;p&gt;&lt;b&gt;onchange event&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The onchange event of the radio button has the following code:&lt;/p&gt;
&lt;pre&gt;if (field.getValue() == &#039;true&#039;)
{
showWork(true);
}
else if (field.getValue() == &#039;false&#039;)
{
showWork(false);
}

&lt;/pre&gt;&lt;p&gt;&lt;b&gt;Pre-Activity&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The Pre-Activity of the Start activity on the Data Item Mapping tab has &quot;false&quot; specified for the Source Expression of radio.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Add Labels to the Right&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Inline script with Id of &quot;Script2&quot; is script using jQuery to insert the German labels to the right of some fields by adding an extra table column where needed. &quot;Script2&quot; is below:&lt;/p&gt;
&lt;pre&gt;// insert right labels
$(document).ready(function(){
var fld = [&quot;FirstName&quot;, &quot;LastName&quot;, &quot;HomePhone&quot;, &quot;JobTitle&quot;, &quot;WorkPhone&quot;];
var de = [&quot;Vorname&quot;, &quot;Zuname&quot;, &quot;Haus Telefonnummer&quot;, &quot;Job-Titel&quot;, &quot;Arbeit
Telefonnummer&quot;];
for (var i = 0; i &amp;lt; 5; i++) {
var td = $(&quot;#_&quot; + fld[i]).parent();
var tr = td.parent();
tr.append(&quot;&amp;lt;td class=\&quot;cust-deLabel\&quot;&amp;gt;&quot; + de[i] + &quot;&amp;lt;/td&amp;gt;&quot;);
}
});

&lt;/pre&gt;&lt;h3&gt;B. Advanced Example – Tabs and Google Map&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u10635/9210-4.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u10635/9210-4_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Figure B1&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u10635/9210-4.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Building on the Simple Example, the Advanced Example adds a Google Map to determine latitude and longitude coordinates. In addition, tabs are added putting the Home and Work Information of the Simple Example into the last tab.&lt;/p&gt;
&lt;h3&gt;Fields&lt;/h3&gt;
&lt;p&gt;Additional fields need to be inserted (see Figure B2). The naming convention of the tabs is used in the Scripts section.&lt;/p&gt;
&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u10635/9210-5.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u10635/9210-5_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Figure B2&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u10635/9210-5.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Scripts&lt;/h3&gt;
&lt;p&gt;All the jQuery injection is done from the Scripts tab of the Forms tab (see Figure B3) in Designer.&lt;/p&gt;
&lt;div class=&quot;clear-block&quot;&gt;
&lt;div class=&quot;thumbnail&quot;&gt;
&lt;a href=&quot;http://www.novell.com/communities/files/u10635/9210-6.jpg&quot;&gt;&lt;img src=&quot;http://www.novell.com/communities/files/u10635/9210-6_0.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;Figure B3&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.novell.com/communities/files/u10635/9210-6.jpg&quot;&gt;Click to view&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Inclusion of jQuery UI CSS Framework&lt;/h3&gt;
&lt;p&gt;The value of script with Id of &quot;Script3&quot; above is used to inject jQuery UI CSS framework into the workflow form. This will allow tabs to be created. It is slightly modified so that input fields will remain consistent with the rest of the application with font-size: 11px instead of 1em. &quot;Script3&quot; is shown below:&lt;/p&gt;
&lt;pre&gt;&amp;lt;/script&amp;gt;
&amp;lt;style type=&quot;text/css&quot;&amp;gt;
/*
* jQuery UI CSS Framework
* Copyright (c) 2009 AUTHORS.txt (&lt;a href=&quot;http://jqueryui.com/about&quot; title=&quot;http://jqueryui.com/about&quot;&gt;http://jqueryui.com/about&lt;/a&gt;)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
*/
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3;
text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:after { content: &quot;.&quot;; display: block; height: 0; clear: both;
visibility: hidden; }
.ui-helper-clearfix { display: inline-block; }
/* required comment for clearfix to work in Opera \*/
* html .ui-helper-clearfix { height:1%; }
.ui-helper-clearfix { display:block; }
/* end clearfix */
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute;
opacity: 0; filter:Alpha(Opacity=0); }
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; backgroundrepeat:
no-repeat; }
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height:
100%; }
/*
* jQuery UI CSS Framework
* Copyright (c) 2009 AUTHORS.txt (&lt;a href=&quot;http://jqueryui.com/about&quot; title=&quot;http://jqueryui.com/about&quot;&gt;http://jqueryui.com/about&lt;/a&gt;)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
* To view and modify this theme, visit &lt;a href=&quot;http://jqueryui.com/themeroller/&quot; title=&quot;http://jqueryui.com/themeroller/&quot;&gt;http://jqueryui.com/themeroller/&lt;/a&gt;?
ffDefault=Verdana,Arial,sansserif&amp;amp;
fwDefault=normal&amp;amp;fsDefault=1.1em&amp;amp;cornerRadius=4px&amp;amp;bgColorHeader=cccccc&amp;amp;bgText
ureHeader=03_highlight_soft.png&amp;amp;bgImgOpacityHeader=75&amp;amp;borderColorHeader=aaaaaa&amp;amp;fcHe
ader=222222&amp;amp;iconColorHeader=222222&amp;amp;bgColorContent=ffffff&amp;amp;bgTextureContent=01_flat.p
ng&amp;amp;bgImgOpacityContent=75&amp;amp;borderColorContent=aaaaaa&amp;amp;fcContent=222222&amp;amp;iconColorConte
nt=222222&amp;amp;bgColorDefault=e6e6e6&amp;amp;bgTextureDefault=02_glass.png&amp;amp;bgImgOpacityDefault=7
5&amp;amp;borderColorDefault=d3d3d3&amp;amp;fcDefault=555555&amp;amp;iconColorDefault=888888&amp;amp;bgColorHover=d
adada&amp;amp;bgTextureHover=02_glass.png&amp;amp;bgImgOpacityHover=75&amp;amp;borderColorHover=999999&amp;amp;fcHo
ver=212121&amp;amp;iconColorHover=454545&amp;amp;bgColorActive=ffffff&amp;amp;bgTextureActive=02_glass.png&amp;amp;
bgImgOpacityActive=65&amp;amp;borderColorActive=aaaaaa&amp;amp;fcActive=212121&amp;amp;iconColorActive=4545
45&amp;amp;bgColorHighlight=fbf9ee&amp;amp;bgTextureHighlight=02_glass.png&amp;amp;bgImgOpacityHighlight=55
&amp;amp;borderColorHighlight=fcefa1&amp;amp;fcHighlight=363636&amp;amp;iconColorHighlight=2e83ff&amp;amp;bgColorEr
ror=fef1ec&amp;amp;bgTextureError=02_glass.png&amp;amp;bgImgOpacityError=95&amp;amp;borderColorError=cd0a0a
&amp;amp;fcError=cd0a0a&amp;amp;iconColorError=cd0a0a&amp;amp;bgColorOverlay=aaaaaa&amp;amp;bgTextureOverlay=01_fla
t.png&amp;amp;bgImgOpacityOverlay=0&amp;amp;opacityOverlay=30&amp;amp;bgColorShadow=aaaaaa&amp;amp;bgTextureShadow=
01_flat.png&amp;amp;bgImgOpacityShadow=0&amp;amp;opacityShadow=30&amp;amp;thicknessShadow=8px&amp;amp;offsetTopShad
ow=-8px&amp;amp;offsetLeftShadow=-8px&amp;amp;cornerRadiusShadow=8px
*/
/* Component containers
----------------------------------*/
.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { fontfamily:
Verdana,Arial,sans-serif; font-size: 11px; }
.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/uibg_
flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
.ui-widget-content a { color: #222222; }
.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/uibg_
highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; fontweight:
bold; }
.ui-widget-header a { color: #222222; }
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid
#d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50%
repeat-x; font-weight: normal; color: #555555; outline: none; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color:
#555555; text-decoration: none; outline: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widgetcontent
.ui-state-focus { border: 1px solid #999999; background: #dadada
url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal;
color: #212121; outline: none; }
.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none;
outline: none; }
.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa;
background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
font-weight: normal; color: #212121; outline: none; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color:
#212121; outline: none; text-decoration: none; }
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid
#fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50%
repeat-x; color: #363636; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a;
background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;
color: #cd0a0a; }
.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35;
filter:Alpha(Opacity=35); background-image: none; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold;
}
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7;
filter:Alpha(Opacity=70); font-weight: normal; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/uiicons_
222222_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/uiicons_
222222_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/uiicons_
222222_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/uiicons_
888888_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image:
url(images/ui-icons_454545_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/uiicons_
454545_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/uiicons_
2e83ff_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image:
url(images/ui-icons_cd0a0a_256x240.png); }
/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius:
4px; }
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius:
4px; }
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-leftradius:
4px; }
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-rightradius:
4px; }
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius:
4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-leftradius:
4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-rightradius:
4px; }
.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-rightradius:
4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-rightradius:
4px; }
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius:
4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
/* Overlays */
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png)
50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa
url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .
30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px;
}/* Accordion
----------------------------------*/
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margintop:
1px; zoom: 1; }
.ui-accordion .ui-accordion-li-fix { display: inline; }
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .
5em .5em .5em 2.2em; }
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top:
50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margintop:
-2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto;
display: none; }
.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
----------------------------------*/
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next {
position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover
{ top: 1px; }
.ui-datepicker .ui-datepicker-prev { left:2px; }
.ui-datepicker .ui-datepicker-next { right:2px; }
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span {
display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margintop:
-8px; }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; textalign:
center; }
.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px
0; }
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year { width: 49%;}
.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse;
margin:0 0 .4em; }
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold;
border: 0; }
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; textalign:
right; text-decoration: none; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0
0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .
2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto;
overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left;
}
/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi { width:auto; }
.ui-datepicker-multi .ui-datepicker-group { float:left; }
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-leftwidth:
0; }
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { borderleft-
width:0; }
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
.ui-datepicker-row-break { clear:both; width:100%; }
/* RTL support */
.ui-datepicker-rtl { direction: rtl; }
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current {
float:right; }
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-rightwidth:
0; border-left-width:1px; }
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { borderright-
width:0; border-left-width:1px; }
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
.ui-datepicker-cover {
display: none; /*sorry for IE5*/
display/**/: block; /*sorry for IE5*/
position: absolute; /*must have*/
z-index: -1; /*must have*/
filter: mask(); /*must have*/
top: -4px; /*must have*/
left: -4px; /*must have*/
width: 200px; /*must have*/
height: 200px; /*must have*/
}/* Dialog
----------------------------------*/
.ui-dialog { position: relative; padding: .2em; width: 300px; }
.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative;
}
.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%;
width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebarclose:
focus { padding: 0; }
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none;
overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0;
background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0;
cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto;
overflow:visible; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/* Progressbar
----------------------------------*/
.ui-progressbar { height:2em; text-align: left; }
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
----------------------------------*/
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display:
block;}
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizablehandle
{ display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px;
}
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left:
0px; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height:
100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%;
}
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px;
bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom:
-5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top:
-5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top:
-5px;}/* Slider
----------------------------------*/
.ui-slider { position: relative; text-align: left; }
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em;
height: 1.2em; cursor: default; }
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em;
display: block; border: 0; }
.ui-slider-horizontal { height: .8em; }
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
.ui-slider-vertical { width: .8em; height: 100px; }
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom:
-.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
----------------------------------*/
.ui-tabs { padding: .2em; zoom: 1; }
.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0;
}
.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width:
0 !important; margin: 0 .2em -1px 0; padding: 0; }
.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottomwidth:
0; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-statedisabled
a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabsselected
a { cursor: pointer; } /* first selector in group seems obsolete, but
required to overcome bug in Opera applying cursor: text overall if defined
elsewhere... */
.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0;
background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }
nv_hidden {visibility:hidden}
&amp;lt;/style&amp;gt;
&amp;lt;script&amp;gt;

&lt;/pre&gt;&lt;p&gt;Note that the value yields syntax and invalid &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/3186&quot;&gt;&lt;acronym title=&quot;Extensible Markup Language&quot;&gt;XML&lt;/acronym&gt;&lt;/a&gt; errors in Designer, which you may ignore. This is because the form renderer is expecting valid ECMA Script, so it wraps all its contents within &amp;lt;script&amp;gt; and &amp;lt;/script&amp;gt; tags. To get around that, the internal CSS is &quot;counter-wrapped&quot; to begin with &amp;lt;/script&amp;gt; and end with &amp;lt;script&amp;gt;.&lt;/p&gt;
&lt;h3&gt;jQuery UI&lt;/h3&gt;
&lt;p&gt;External script with Id of &quot;Script4&quot; is the google library to load jQuery UI. It&#039;s value is:&lt;br /&gt;
&lt;a href=&quot;http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js&quot;&gt;http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Google Maps &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2636&quot;&gt;&lt;acronym title=&quot;application programming interfaceA set of functions, procedures, values, or other defined interface standards that an application uses to request and carry out services performed by another program or by an operating system. A single API typically specifies how input should be requested and obtained, and how output should be done.&quot;&gt;API&lt;/acronym&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;External script with Id of &quot;Script5&quot; is the Google Maps API. It&#039;s value is:&lt;br /&gt;
&lt;a href=&quot;http://maps.google.com/maps/api/js?sensor=false&quot;&gt;http://maps.google.com/maps/api/js?sensor=false&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Create Tabs&lt;/h3&gt;
&lt;p&gt;Inline script with Id of &quot;Script6&quot; converts each Title control with Form Field Name of tabNtitle to a tab using jQuery with each of the controls under the tab-title on its respective tab (see Figure B2). Script6 is below:&lt;/p&gt;
&lt;pre&gt;// transform the input, placing in tabs
$(document).ready(function(){
// obtain all rows in table
var trGuys = $(&quot;form table tr&quot;);
try {
var tabNumber = 0;
var foundFirst = false;
for (index=0; index &amp;lt; trGuys.size(); index++) {
var currentRow = trGuys.get(index);
var tabTitle = $(&quot;#_tab&quot; + (tabNumber+1) + &quot;title&quot;, currentRow);
if (tabTitle.size() &amp;gt; 0) {
tabNumber = tabNumber + 1;
foundFirst = true;
// if this is our first tab, start to build the structure
if (tabNumber == 1) {
$(&#039;&amp;lt;div id=&quot;tabs&quot;&amp;gt;&amp;lt;ul id=&quot;tabTitlebar&quot;&amp;gt;&amp;lt;/ul&amp;gt;&#039;).insertAfter(&quot;#uiform
input[name=&#039;uasess&#039;]&quot;);
}
var tabLi = $(&quot;&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&quot;);
var anchor = $(&quot;&amp;lt;a id=&#039;tab&quot; + tabNumber + &quot;anchor&#039; href=&#039;#tabs-&quot;+ tabNumber
+&quot;&#039;&amp;gt;&quot; + &quot;&amp;lt;/a&amp;gt;&quot;);
tabLi.append(anchor);
tabLi.appendTo(&quot;#tabTitlebar&quot;);
//as of jQuery 1.3.2 (currently working in FF but not IE)
//$(&quot;&#039;#_tab&quot; + currentTab + &quot;title&#039;&quot;, currentRow).appendTo(&quot;[href=#tabs-&quot;
+ currentTab + &quot;]&quot;);
//so instead append and remove
$(currentRow).remove();
anchor.append(tabTitle);
//Add the div wrapper for jquery tabs
//and the table wrapper for the tab contents (ie, the table rows of form
controls)
$(&quot;&amp;lt;div id=&#039;tabs-&quot; + tabNumber + &quot;&#039;&amp;gt;&amp;lt;table cellspacing=&#039;2&#039; cellpadding=&#039;0&#039;
border=&#039;0&#039; id=&#039;tab&quot; + tabNumber + &quot;-content&#039;&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/div&amp;gt;&quot;).appendTo(&quot;#tabs&quot;);
} else {
//place the buttons in a table by themselves
if ($(&quot;:has(&#039;:button&#039;)&quot;, trGuys.get(index)).size() &amp;gt; 0) {
$(&quot;&amp;lt;table id=&#039;jquery-action-buttons&#039; align=&#039;center&#039;
width=&#039;180px&#039;&amp;gt;&amp;lt;/table&amp;gt;&quot;).insertAfter(&quot;#tabs&quot;);
trGuys.slice(index, index+1).appendTo(&quot;#jquery-action-buttons&quot;);
} else if (foundFirst == true) {
trGuys.slice(index, index+1).appendTo(&quot;#tab&quot; + tabNumber + &quot;-content&quot;);
}
}
}
} catch (e) {
alert(e);
}
function init() {
$(&#039;#tabs&#039;).tabs();
}
// transform the input, placing in tabs
init();
});

&lt;/pre&gt;&lt;h3&gt;Add Google Map&lt;/h3&gt;
&lt;p&gt;Inline script with Id of &quot;Script7&quot; inserts a Google Map onto the first tab. The regular form controls are repositioned to be to the right of the map. A Click listener is added to the map so that the latitude and longitude are put into the form&#039;s locationLatitude and locationLongitude fields,&lt;br /&gt;
respectively. &quot;Script7&quot; is below:&lt;/p&gt;
&lt;pre&gt;//Add Google Map
$(document).ready(function(){
var map;
var marker;
// place the google maps control to be used as a tower location chooser
// on the first tab on left side of page, move existing juice controls
// to right side of page
function addLatLongHelper() {
$(&#039;&amp;lt;table cellspacing=&quot;2&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr
valign=&quot;top&quot;&amp;gt;&amp;lt;td&amp;gt;&amp;lt;div id=&quot;map_canvas&quot; style=&quot;width: 400px; height:
400px&quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;div
id=&quot;insertControlsHere&quot;/&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;/table&amp;gt;&#039;).insertBefore(&quot;#tabs-1
table&quot;);
var removedElement = $(&quot;#tabs-1 table:nth-child(2)&quot;).remove();
$(&#039;#insertControlsHere&#039;).append(removedElement);
var myLatlng = new google.maps.LatLng(39.034271,-77.174936);
var myOptions = {
zoom: 16,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.SATELLITE
}
map = new google.maps.Map(document.getElementById(&quot;map_canvas&quot;), myOptions);
google.maps.event.addListener(map, &#039;click&#039;, function(event) {
placeMarker(event.latLng);
});
}
// function to add lat/long to page
function placeMarker(location) {
var clickedLocation = new google.maps.LatLng(location);
if (marker == null ) {
marker = new google.maps.Marker({
position: location,
map: map});
marker.set_draggable({flag:true});
} else {
marker.set_position(location);
}
try {
// get lat/long from the click
var lat = Math.round(location.lat()*Math.pow(10,4))/Math.pow(10,4);
var lng = Math.round(location.lng()*Math.pow(10,4))/Math.pow(10,4);
// set lat/long on form
$(&#039;#_locationLatitude&#039;).val(lat);
$(&#039;#_locationLongitude&#039;).val(lng);
} catch (ex) {
alert(ex);
}
}
// functions have been defined, call them
addLatLongHelper();
});

&lt;/pre&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;With the ability to import external JavaScript libraries, you can utilize jQuery to manipulate your form&#039;s look and layout. In addition, you can also capitalize on other libraries such as Google&#039;s Map API.&lt;/p&gt;
 &lt;div class=&quot;og_rss_groups&quot;&gt;&lt;ul class=&quot;links&quot;&gt;&lt;li class=&quot;first last og_links&quot;&gt;&lt;a href=&quot;/communities/partners/isvihv&quot; class=&quot;og_links&quot;&gt;Technology Partners&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description>
 <comments>http://www.novell.com/communities/node/9210/using-jquery-identity-manager-roles-based-provisioning-module-workflow-forms#comments</comments>
 <category domain="http://www.novell.com/communities/coolsolutions/nim">Identity Manager</category>
 <category domain="http://www.novell.com/communities/content-type/tip">Tip</category>
 <category domain="http://www.novell.com/communities/taxonomy/term/45">Customizing</category>
 <category domain="http://www.novell.com/communities/topic/designer">Designer</category>
 <category domain="http://www.novell.com/communities/taxonomy/term/29">Developer</category>
 <category domain="http://www.novell.com/communities/topic/developer+tools">Developer Tools</category>
 <category domain="http://www.novell.com/communities/topic/features">Features</category>
 <category domain="http://www.novell.com/communities/topic/forms">Forms</category>
 <category domain="http://www.novell.com/communities/taxonomy/term/69">Identity &amp;amp; Security Management</category>
 <category domain="http://www.novell.com/communities/topic/identity+management">Identity Management</category>
 <category domain="http://www.novell.com/communities/topic/scripting">Scripting</category>
 <category domain="http://www.novell.com/communities/topic/userapp">UserApp</category>
 <category domain="http://www.novell.com/communities/topic/workflow">Workflow</category>
 <enclosure url="http://www.novell.com/communities/files/UseJQuery.pdf" length="824390" type="application/pdf" />
 <group domain="http://www.novell.com/communities/coolsolutions/ism" xmlns="http://drupal.org/project/og">Identity &amp;amp; Security Management Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions" xmlns="http://drupal.org/project/og">Cool Solutions</group>
 <group domain="http://www.novell.com/communities/partners/isvihv" xmlns="http://drupal.org/project/og">Technology Partners</group>
 <pubDate>Thu, 05 Nov 2009 16:15:59 -0700</pubDate>
 <dc:creator>stevewdj</dc:creator>
 <guid isPermaLink="false">9210 at http://www.novell.com/communities</guid>
</item>
<item>
 <title>Let&#039;s talk about DirXML-Associations</title>
 <link>http://www.novell.com/communities/node/9205/lets-talk-about-dirxml-associations</link>
 <description> &lt;p&gt;Novell has done a pretty good job in the forums, organizing volunteer (what used to be called Sysops, but in this &quot;i-everything&quot; or &quot;e-everything&quot; age, the name had to change and are now called Novell Knowledge Partners, or NKPs) to try and either answer the questions themselves, or try to find someone they know who can help.  If you have not used the forums when you need help, I highly recommend it!  Search first, ask questions second, and provide details and trace in your questions.&lt;/p&gt;
&lt;p&gt;I regularly read and post in the Identity Manager forums (as do a number of other helpful people) and often can help people out there in a fun way.  This article was a post I wrote to answer a question, and I realized would make a good standalone article for Cool Solutions.&lt;/p&gt;
&lt;p&gt;The forums are available at &lt;a href=&quot;http://forums.novell.com&quot; title=&quot;http://forums.novell.com&quot;&gt;http://forums.novell.com&lt;/a&gt; over a silly vBulletin web interface (Icky!  Works well when Google searching to show the results), but I prefer to use &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/1888&quot;&gt;&lt;acronym title=&quot;Network News Transfer ProtocolThe basic Internet protocol used to exchange network news articles between multiple news servers and between news servers and newsreaders.&quot;&gt;NNTP&lt;/acronym&gt;&lt;/a&gt; the real &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/785&quot;&gt;&lt;acronym title=&quot;1. Short for protocol stack.2. A uniform set of rules or an agreed-upon method of communication that enable two devices to connect and transmit data or to send particular types of information between computer systems. Protocols determine how data is transmitted between computing devices and over networks. AFP, ALAP, RTMP, NCP, and IPX are examples of network protocols. AFP, ALAP, RTMP, NCP, and IPX are examples of network protocols. TCP/IP (Transfer Control Protocol/Internet Protocol), HTTP (Hypertext Transfer Protocol), and FTP (File Transfer Protocol) are examples of Internet protocols.&quot;&gt;protocol&lt;/acronym&gt;&lt;/a&gt; for newsgroups dang it!  Use your GroupWise client, Thunderbird, tin, nm, whatever you like, and point it at nntp://forums.novell.com and look for the novell.support.identity-manager.engine-drivers forum.&lt;/p&gt;
&lt;p&gt;A user in the forums asked a question a little while back:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I am utterly confused.. and have a very basic question.Whenever I set an association while on the subscriber channel with the source object, will the association be with the driver? If yes, then how do we make sure that the same destination row will be hit each time I modify the user object? (If I talk bout synchronizing data)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I thought that maybe an explanation of the Association values use is pertinent here.&lt;/p&gt;
&lt;p&gt;So you have two (or more, more is left as an exercise to the reader) connected systems.  You have an object in each system and the porpoise of IDM is to link the two of them.&lt;/p&gt;
&lt;p&gt;Thus we have a matching &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/3000&quot;&gt;&lt;acronym title=&quot;In ZENworks Desktop Management, ZENworks Handheld Management, and ZENworks Server Management, a set of rules that define how workstations, handheld devices, and servers can be configured and controlled, including application availability and access, file access, and the appearance and contents of individual desktops. Policies are contained within policy packages, where they are also administered and customized.&quot;&gt;policy&lt;/acronym&gt;&lt;/a&gt; to decide who is matched, and failing a match, a create to determine rules to allow creation, and then a placement policy to tell us where to place them for creates.&lt;/p&gt;
&lt;p&gt;If you have not already, please read David Gersic&#039;s excellent series of articles that walks through this process, step by step through the process flow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6679/guided-tour-novell-identity-manager&quot;&gt;A Guided Tour of Novell Identity Manager - Part 1&lt;br /&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6696/guided-tour-novell-identity-manager&quot;&gt;A Guided Tour of Novell Identity Manager - Part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6697/guided-tour-novell-identity-manager&quot;&gt;A Guided Tour of Novell Identity Manager - Part 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But once they are created, it would be needlessly inefficient to match on every event.  Imagine the horrible overhead!  Queries into other systems are &#039;slow&#039; in the grand scheme of things, and costly.  Watch it in trace sometime.  You will often see second long delays, depending on the system for queries to respond.  Plus the query document needs to be processed through the driver rules as well.  Now to be fair, some systems are slower than others, and &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/3276&quot;&gt;&lt;acronym title=&quot;A distributed, replicated naming service that maintains information about and provides access to a list of objects that represent network resources, such as network users, servers, printers, print queues, and applications. The directory is physically stored as a set of database files on a server. If the server hosts file system volumes, these files are on volume sys:. If no volumes are present, the directory is stored on the server&#039;s local disk. eDirectory tightly integrates Novell Security Services for e-commerce (PKI, cryptography, and authentication services), allowing developers to build applications that can be accessed and managed across the entire network through explicit policies.&quot;&gt;eDirectory&lt;/acronym&gt;&lt;/a&gt; and &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2632&quot;&gt;&lt;acronym title=&quot;An advanced, hierarchical directory service that is an integral part of the Microsoft Windows 2000 architecture. It is LDAP-compliant and built on the Internet.&quot;&gt;Active Directory&lt;/acronym&gt;&lt;/a&gt; drivers are usually pretty quick for queries.  Nonetheless in general, if you can avoid needless queries, it is better. &lt;/p&gt;
&lt;p&gt;Interestingly enough, the engine is pretty darn smart about reusing the data in previous query (aka caching it) and also about reading ahead in the policy object, to bundle upcoming queries for attributes, into one single query event, to pre load the &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/1063&quot;&gt;&lt;acronym title=&quot;1. (verb) To hold data in a temporary storage area, such as in RAM. The data can be accessed more quickly from RAM than from the hard disk.2. (noun) A quickly accessible area of RAM or a directory or a disk that stores frequently used information.3. (noun) On the Web, refers to the area where the browser stores downloaded graphics on the user&#039;s computer. That way, when the user has to reload the graphics, the browser retrieves it from the computer faster than ite would reloading the graphics from the Internet.&quot;&gt;cache&lt;/acronym&gt;&lt;/a&gt;.  It is sort of disconcerting watching in Dstrace, when a query for an attribute you know is expected, actually queries for three or four other attributes.  Until I realized what was going on, I could not understand why it was querying for these extra attributes when all it needed was a single one for the current rule.&lt;/p&gt;
&lt;p&gt;But since much of the overhead is in the connection, crossing the system boundaries, etc, it turns out that the actual retrieval of the data, once the target user is found is usually quite quick.  Thus this is a really nice efficiency optimization.  Imagine the case of an &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/1613&quot;&gt;&lt;acronym title=&quot;Lightweight Directory Access ProtocolAn X.500-related Open Systems Interconnection (OSI) protocol that clients can use to read and write Directory information. LDAP is used to publish Directory information such as telephone numbers and e-mail addresses. The Directory features available to LDAP clients are dependent upon the features built into the LDAP server and the LDAP client; some clients have the ability to read and write data; others can only read Directory data.Web browsers and e-mail programs can query an LDAP-compliant directory (for example, Novell eDirectory).LDAP allows a client to search through a large database of addresses, phone numbers, and people stored on a server.&quot;&gt;LDAP&lt;/acronym&gt;&lt;/a&gt; query, that needed to first find the object.  Then retrieve either a single attribute, or three.  The cost in terms of time to find the object is the same (usually, discounting any caching the LDAP &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2314&quot;&gt;&lt;acronym title=&quot;A powerful computer running software that supplies network clients with services, such as file, print, communication, or application services. Examples of servers include1. Routing servers, which connect nodes and networks of similar architectures2. Gateway servers, which connect nodes and networks of different architectures by performing protocol conversions3. Terminal servers, print servers, disk servers, and file servers, which provide an interface between compatible peripheral devices on a local area network&quot;&gt;server&lt;/acronym&gt;&lt;/a&gt; might have done for previous queries) and retrieving one or three attributes is barely different.  Thus you save the extra two instances of the search overhead.&lt;/p&gt;
&lt;p&gt;Sometimes you want to get the data again, not using the cache, which can interesting, and I talk about that more in this series on the use of the Destination Attribute, Source Attribute, Operation Attribute. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/5818/different-attribute-options-identity-manager&quot;&gt;The different attribute options in Identity Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/5920/ism-more-thoughts-sourcedestinationoperation-attribute-tokens-identity-manager&quot;&gt;More thoughts on Source/Destination/Operation attribute tokens in Identity Manager&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Therefore, in order to avoid this costly situation we need to store something that identifies the users in both systems.&lt;/p&gt;
&lt;p&gt;In an ideal world it would be a two way link, with some kind of attribute on both sides of the fence.  (The eDir-eDir driver, actually does do that!  There is an Assoc value on the objects on both sides of the directory).  That would help makes things faster!&lt;/p&gt;
&lt;p&gt;Alas, it is hard enough getting the AD guys to let us install a Remote Loader and the password sync filters, get the Domino guys let us install ndsrep.exe on their Domino servers, get the AS400 guys to let us install the Remote Loader on the AS400 and so on, let alone extend their schema and start storing data on every single object we use.  Like thats going to happen.  On a side note, what is up with Active Directory admins?  Why are they so uptight about schema!  Even a simple schema change is a big deal with them.&lt;/p&gt;
&lt;p&gt;So assume for a moment that a two way link is like the solid gold potty of Austin Powers fame.  We all want one, but it just ain&#039;t in the cards baby.&lt;/p&gt;
&lt;p&gt;What is our next best option?  Well we are enlightened people, using eDirectory where schema is meant to be useful and used, not feared and locked up in the monastery.  So there is an eDir attribute called DirXML-Associations.&lt;/p&gt;
&lt;p&gt;Next, we have a bit of info we need to store.  One of the many neat things about eDirectory are the interesting schema syntaxes that exist.  They are pre defined, and as far as I know, there is no way for us, mere peons to add new schema syntax types. &lt;/p&gt;
&lt;p&gt;In this case, DirXML-Associations is using a syntax type called Path syntax, which was designed to describe a file, in the &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/1388&quot;&gt;&lt;acronym title=&quot;The organization the NetWare server uses to store data on its hard disks. Each file is given a filename and stored at a specific location in a hierarchical filing system so that files can be located quickly.Formerly called directory structure.&quot;&gt;file system&lt;/acronym&gt;&lt;/a&gt;.  You can read more about some of the interesting eDirectory attribute syntax types that are available in these articles I wrote:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6450/interesting-schema-syntaxes-edirectory-identity-manager-perspective-part-1&quot;&gt;Interesting Schema Syntaxes in eDirectory from an Identity Manager Perspective - Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6457/interesting-schema-syntaxes-edirectory-identity-manager-perspective-part-2&quot;&gt;Interesting Schema Syntaxes in eDirectory from an Identity Manager Perspective - Part 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;State:&lt;/b&gt; the 0,1,2,3,4,5  which indicates what state the association is in. 1 is what you want to see, 0 means ignore, the rest are no longer very relevant in IDM 3.5 and higher.  This is the nameSpace component of the attribute syntax and was meant to represent the &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/3247&quot;&gt;&lt;acronym title=&quot;Controls the syntax of naming, such as which characters are legal in filenames and path separators, how long the name can be, and whether case is significant and/or preserved. Every volume must have one or more name spaces associated with it. If a volume has more than one name space associated with it, valid filenames will be maintained on that volume for all of its name spaces. If a file name is legal in more than one name space, it is stored only once and shared by the name spaces.&quot;&gt;name space&lt;/acronym&gt;&lt;/a&gt; number (DOS, OS2, MAC, etc were assigned numbers starting at 0) but is really a 32 bit integer field.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Driver DN:&lt;/b&gt; This allows us to have more than one association per object. As each association has a per driver instance, via  DN reference to the driver.  It does mean you should only have one association per driver, but the schema does not enforce that, you could by hand set multiple DirXML-Association values, on one object.  I am not sure why you would do it, and I am can pretty much guarantee it will break Identity Manager for that user, but you could!  &lt;/p&gt;
&lt;p&gt;This is the component called volume in the attribute syntax and is meant to represent the DN of the volume object holding the file.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Assoc Value:&lt;/b&gt;  This is the &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2560&quot;&gt;&lt;acronym title=&quot;A number that uniquely identifies a user to the system. It is the internal number associated with a user ID. Also called User ID, user identifier, user identification, user identification number.&quot;&gt;unique identifier&lt;/acronym&gt;&lt;/a&gt; in the other system (not eDir) that allows us to skip matching each time and tell the other system, give me this guy please!  Or modify this specific guy.  It needs to be something unique, because that means with a single search we can definitely find the other object in that target system.&lt;/p&gt;
&lt;p&gt;Now each connected system is very different and has different ideas about what is the truly unique identifier.  From Lotus Notes, where every document has a UNID (Universal ID) that is a 32 character hex string.  (Hmm, 16 to the power of 32 is about 3.4 time ten to the 38 possible values, or about a 128 bit counter?  Because 16 to the 32 is about like saying 2 to the 4 to the 32, which is 2 to the 128.  Thats a lot!)  Active Directory uses the 128 bit &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2842&quot;&gt;&lt;acronym title=&quot;Global unique identifierIn ZENworks Desktop Management and ZENworks Handheld Management, a randomly generated string that provides a unique identifier for an application. When Novell Application Launcher (NAL) distributes an application to a workstation in ZENworks Desktop Management, it adds the GUID to the workstation&#039;s Windows registry for distribution tracking purposes. &quot;&gt;GUID&lt;/acronym&gt;&lt;/a&gt; that Active Directory maintains.  Whereas a system like Unix or Linux running NIS or NIS+ drivers, can only really use the object name as the unique identifier.  Older systems have this issue.  The AS400 drivers, the mainframe drivers, usually reference the name of the object as the unique identifier.  &lt;/p&gt;
&lt;p&gt;With so many drivers out there, and each one having a different notion of what is a unique value, I started this article, that quickly grew out of control (but in a good way!!) to try and get all the known patterns into a single location to make looking it up easier.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/1696/open-call-idm-association-values-edirectory-objects&quot;&gt;Open Call - IDM Association Values for eDirectory Objects&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
Now with that preamble out of the way lets try and answer your questions:&lt;/p&gt;
&lt;p&gt;So the association value is stored on the object (User in this case) in eDirectory as the multi valued and multi part (aka structured) attribute DirXML-Associations.  There is one association per object, for each driver to which they are associated.  It is stored on the user, per driver.&lt;/p&gt;
&lt;p&gt;The reference for a simple JDBC driver is typically the Row, in the table, in the schema, as you have posted in trace before in this thread.  (Lets focus on the simple case first).&lt;/p&gt;
&lt;p&gt;Thus a Sub channel event (Change of Last name for example in eDir) would send a modify to the Row referenced by the association value, and ask the DB to change the Last Name for that Row.&lt;/p&gt;
&lt;p&gt;Going the other way, on the Pub channel, a change in the DB, detected either by triggerless mode&#039;s poll cycle looking at timestamps of values in rows and columns, or by a trigger setup in the DB to event upon the change to the Row&#039;s Last name column value would be detected and sent to the driver shim, including the information of which row, table, schema it came from.&lt;/p&gt;
&lt;p&gt;The engine picks up this value (You should see a node that looks like &lt;/p&gt;
&lt;pre&gt;&amp;lt;association&amp;gt;USERID=123,TABLE=tableName,SCHEMA=schemaName&amp;lt;/association&amp;gt;

&lt;/pre&gt;&lt;p&gt; in the event before it completes the Pub-Event Transform, to show what the driver shim thinks the reference to the changed object is.&lt;/p&gt;
&lt;p&gt;
If the engine cannot find this reference in eDir on a User, then it is an operation on an un-associated object and runs through Match, Create, and then  Placement policies.&lt;/p&gt;
&lt;p&gt;If in the Matching rule it does find an object it skips ahead to the Pub-Command Transform (having previously completed the Event transform).&lt;/p&gt;
&lt;p&gt;Ok, so now on to your more complex DB case.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Ok, in my case I have 2 tables, one which stores his data and has a primary key, the other one has a foreign key dependency on the first one and stores the role. I am detecting change on this second one which doesn&#039;t have a primary key. Also, I update them by hitting dest data store directly (with dest command &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2115&quot;&gt;&lt;acronym title=&quot;1. A microchip that executes machine code stored in the main memory. It is the brain of the computer. Also called the Central Processing Unit or CPU.2. The data processing unit of a computer. Computers can be uniprocessing or multiprocessing. A uniprocessor system has only one run queue from which the processor can pick up threads for execution. In a multiprocessing system, however, more than one processor is available for the distribution of threads.&quot;&gt;processor&lt;/acronym&gt;&lt;/a&gt;).. I think I should have told these things earlier..Apologies!!&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I don&#039;t know the answer.  :) (Those who can do, those who can&#039;t ice skate... I am a consultant now, and thus more of an idea rat... (Anyone remember that Dilbert episode?))&lt;/p&gt;
&lt;p&gt;Can you store the primary key of the second table on the user in eDir as part of the process?  I.e. There is a reference in the second table to the primary key of the first table, (aka Foreign key).  When that is set, somehow store a reciprocal link on the user in eDir, where schema is flexible and useful?&lt;/p&gt;
&lt;p&gt;Perhaps sync that second table as a second set of objects?  Dunno what class, heck make one up, or pick one.  There are hundreds of interesting object classes in basic eDirectory schema, and even in common schema extensions that you can leverage.&lt;/p&gt;
&lt;p&gt;Then references between them can be maintained by the engine?&lt;/p&gt;
&lt;p&gt;On a side note, you can execute SQL commands via the driver on the Sub channel pretty trivially using policy if needed: &lt;a href=&quot;http://www.novell.com/communities/node/2569/using-jdbc-driver-and-direct-sql&quot;&gt;Using the JDBC Driver and Direct SQL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What must change on the &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2567&quot;&gt;&lt;acronym title=&quot;1. A leaf object in the Novell Directory Services (NDS) tree that represents a person who uses the network. It contains information about the network user it represents, such as login name, telephone number, address, and group membership.2. A login script type that sets the environment for a single user. It is a property of the User object. This fulfills a user&#039;s individual network setup needs, such as mapping to a specific working directory or connecting to a printer. This login script executes last. When a user is created (User object), this login script automatically sets up mappings to the user&#039;s home directory and to the PUBLIC directory on the server.&quot;&gt;User object&lt;/acronym&gt;&lt;/a&gt; in eDir, when a change in the &#039;role&#039; (aka second) table changes?&lt;/p&gt;
&lt;p&gt;Walking down the tracks that this train of thought takes, might help out in this case.&lt;/p&gt;
 &lt;div class=&quot;og_rss_groups&quot;&gt;&lt;ul class=&quot;links&quot;&gt;&lt;li class=&quot;first last og_links&quot;&gt;&lt;a href=&quot;/communities/coolsolutions&quot; class=&quot;og_links&quot;&gt;Cool Solutions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description>
 <comments>http://www.novell.com/communities/node/9205/lets-talk-about-dirxml-associations#comments</comments>
 <category domain="http://www.novell.com/communities/content-type/appnote">AppNote</category>
 <category domain="http://www.novell.com/communities/taxonomy/term/5">ConsoleOne</category>
 <category domain="http://www.novell.com/communities/taxonomy/term/6">DirXML</category>
 <category domain="http://www.novell.com/communities/coolsolutions/edirectory">eDirectory</category>
 <category domain="http://www.novell.com/communities/coolsolutions/nim">Identity Manager</category>
 <category domain="http://www.novell.com/communities/product/identitymanager/identitymanager35">Identity Manager 3.5</category>
 <group domain="http://www.novell.com/communities/coolsolutions/ism" xmlns="http://drupal.org/project/og">Identity &amp;amp; Security Management Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions" xmlns="http://drupal.org/project/og">Cool Solutions</group>
 <pubDate>Wed, 04 Nov 2009 14:37:30 -0700</pubDate>
 <dc:creator>geoffc</dc:creator>
 <guid isPermaLink="false">9205 at http://www.novell.com/communities</guid>
</item>
<item>
 <title>Heads Up!  Novell Pulse Coming Your Way</title>
 <link>http://www.novell.com/communities/node/9225/heads-novell-pulse-coming-your-way</link>
 <description> &lt;p&gt;Novell just announced the first real-time collaboration platform for the enterprise, called Novell Pulse.  Novell and Google jointly announced that they are working together to enable Novell Pulse users and Google Wave users to seamlessly work together across both systems.  Novell is the first collaboration provider to integrate Google Wave.&lt;/p&gt;
&lt;h2&gt;What is Novell Pulse?&lt;/h2&gt;
&lt;p&gt;Novell Pulse is the first enterprise class, real-time collaboration platform that unites communication, authoring and social messaging tools.  Novell Pulse helps drive enterprise productivity and innovation by making it easier to communicate digitally, generate ideas and share information.  People continents apart can share and edit documents, jointly browse websites, and have a digital conversation, all in real-time.  Individuals can also manage content overload by filtering for people and topics to follow as well as storing files—both native and office type—along with their related groups and conversations.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;What can you do with Pulse? &lt;/b&gt;&lt;br /&gt;
Novell Pulse is an enterprise real-time collaboration solution. Real-time collaboration tools allows people to easily share and work together on documents, have real-time conversations, interact using social media tools, and much more. &lt;/p&gt;
&lt;p&gt;Novell Pulse was designed specifically for the enterprise user, so it includes robust security and management capabilities. Novell Pulse will also interoperate with other real-time technologies like Google Wave, as well as existing collaboration solutions.&lt;/p&gt;
&lt;h2&gt;How would you use it in a business setting?&lt;/h2&gt;
&lt;p&gt;&lt;i&gt;Communication.&lt;/i&gt;  Say you have a project that requires input from 5 people.  Before Novell Pulse, you would email those 5 people and receive separate responses—some of which would be responding to your email, while others would be responding to other emails from the distribution list, depending on when each was composed.  Then you&#039;d have to aggregate all the responses, synthesize them, and begin the cycle of emails all over again. &lt;/p&gt;
&lt;p&gt;With Novell Pulse, you send one, synchronous message, and all 5 people can  respond to you and each other in real-time.  No aggregation, missed information or repetition of efforts—and if you make the conversation public, you may get valuable input from someone you weren&#039;t expecting.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Intra- and Inter-company Collaboration. &lt;/i&gt; For example, you plan to issue a product datasheet jointly with one of your partners.  You work in different document publishing environments such as OpenOffice and MS Word.  Before Novell Pulse, you would have written the press release and sent it as an OpenOffice attachment to everyone on your team within your company for input, then aggregated all the input, edited it down for redundancy, and then converted it to MS Word before sending as an attachment to your partner for input.  Then you&#039;d begin the cycle again for every round of edits.  &lt;/p&gt;
&lt;p&gt;With Novell Pulse, you and your partner could simply collaborate on the document in real-time and then both companies could export the document into their preferred format when it&#039;s final.  This also works seamlessly if you are using Novell Pulse and your partner is using Google Wave.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Breaking Through the Clutter. &lt;/i&gt;  Information overload is a serious concern for companies today. Users are hit with information from all directions—email, instant messenger, blogs, micro-blogs, social networks, calendars.  By unifying all these information mediums into one, easy-to-use interface with folders, filtering and search, Novell Pulse enables users to make sense of it all and focus on what&#039;s really important.&lt;/p&gt;
&lt;h2&gt;Working With Google&lt;/h2&gt;
&lt;p&gt;This is a technical collaboration between Google and Novell to bring federation to both systems, using the Wave Federation Protocol. We&#039;re the first company to show federation using the WFP, and we&#039;re the first collaboration solution to integrate with Google Wave. Novell Pulse and Google Wave systems can operate in tandem so that users of the two platforms can work together in real time, each using their preferred tool. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;What does federation with Google Wave involve?&lt;/b&gt;&lt;br /&gt;
Federation involves using a &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/785&quot;&gt;&lt;acronym title=&quot;1. Short for protocol stack.2. A uniform set of rules or an agreed-upon method of communication that enable two devices to connect and transmit data or to send particular types of information between computer systems. Protocols determine how data is transmitted between computing devices and over networks. AFP, ALAP, RTMP, NCP, and IPX are examples of network protocols. AFP, ALAP, RTMP, NCP, and IPX are examples of network protocols. TCP/IP (Transfer Control Protocol/Internet Protocol), HTTP (Hypertext Transfer Protocol), and FTP (File Transfer Protocol) are examples of Internet protocols.&quot;&gt;protocol&lt;/acronym&gt;&lt;/a&gt; call the Wave Federation Protocol to enable messages (or Waves) to be shared in real-time, character-for-character, as they are being created or edited between two or more separate systems.  &lt;/p&gt;
&lt;p&gt;The sharing is based on addressing.  You place addresses ( which look just like e-mail addresses) from potentially different domains on a message or Wave, then the message is live and any edits made by anyone will be automatically shared in real-time.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;How is Novell Pulse different from Google Wave?&lt;/b&gt;&lt;br /&gt;
The design point for Novell Pulse is the enterprise user, so we&#039;ve placed a strong emphasis on features such as security and management controls. We&#039;ve also drawn on our 20+ years experience in the enterprise collaboration space with products like GroupWise, and worked to address enterprise and business use-cases. &lt;/p&gt;
&lt;p&gt;Novell Pulse is a key component in Novell’s collaboration strategy and open collaboration architecture, working standalone or in concert with Novell’s broader product portfolio. Novell Pulse is very complementary to Google Wave and to our existing collaboration products such as GroupWise. Key features, which draw on the best of e-mail, instant messaging, document sharing, social connections, real-time co-editing and enterprise controls, include:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Security&lt;br /&gt;
Provisioning, sign-on and permissions leverage enterprise identity and access management systems, directory servers and audit tools to integrate with established processes, keep data safe and support compliance requirements.&lt;/li&gt;
&lt;li&gt;Real-time collaboration&lt;br /&gt;
Collaborative editing and document sharing enables users to get work done with other users in real-time, from co-editable online documents to the ability to share and comment on traditional office documents in real time.&lt;/li&gt;
&lt;li&gt; Unified Inbox&lt;br /&gt;
A single interface allows users to see, sort and filter all their personal and professional content from various social messaging services, email, Wave, etc. all in one place.&lt;/li&gt;
&lt;li&gt; Enterprise social messaging&lt;br /&gt;
Social Blog allows users to share, follow and comment on topics and ideas.&lt;/li&gt;
&lt;li&gt;Real-time awareness and chat&lt;br /&gt;
Allows users to know exactly when their colleagues are available via people, group and message activity monitoring.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Novell Pulse will be available in both cloud and on-premise deployments.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Is Novell Pulse designed for the consumer or the enterprise customers?&lt;/b&gt;&lt;br /&gt;
Novell Pulse is focused on the enterprise customers. It addresses the needs of a global, knowledge-based workforce and gives enterprises the confidence to embrace real-time collaboration technologies. Novell Pulse leverages Novell&#039;s expertise and experience developing enterprise collaboration and communication tools, as well as industry leadership in creating strong identity and security management solutions.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Is Novell Pulse open source?&lt;/b&gt;&lt;br /&gt;
No.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;When will Novell Pulse be available? What will it cost? &lt;/b&gt;&lt;br /&gt;
Novell Pulse will be generally available in the first half of 2010 in a cloud deployment, and with an on-premise deployment option in a subsequent release.  Pricing will be announced at general availability.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;How can I get access in when this goes to beta availability?&lt;/b&gt;&lt;br /&gt;
We&#039;ll be announcing that later this year.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Where can I see Novell Pulse in action?&lt;/b&gt;&lt;br /&gt;
Novell Pulse was demonstrated on Nov. 4, 2009 during the Integrating Google Wave into the Enterprise keynote at Enterprise 2.0 in San Francisco. We&#039;ll be giving previews of the technology over the coming weeks via Novell blogs and video. Stay tuned. A select beta is scheduled for early 2010.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Where can I get more information about Novell Pulse?&lt;/b&gt;&lt;br /&gt;
You can find more information at  &lt;a href=&quot;http://www.novell.com/pulse&quot; title=&quot;www.novell.com/pulse&quot;&gt;www.novell.com/pulse&lt;/a&gt; . We&#039;ll be previewing more of Novell Pulse over the coming weeks too.&lt;/p&gt;
 &lt;div class=&quot;og_rss_groups&quot;&gt;&lt;ul class=&quot;links&quot;&gt;&lt;li class=&quot;first last og_links&quot;&gt;&lt;a href=&quot;/communities/partners/endusercomputing&quot; class=&quot;og_links&quot;&gt;End-User Computing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description>
 <comments>http://www.novell.com/communities/node/9225/heads-novell-pulse-coming-your-way#comments</comments>
 <group domain="http://www.novell.com/communities/coolsolutions/zenworks" xmlns="http://drupal.org/project/og">ZENworks Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/workgroup" xmlns="http://drupal.org/project/og">Workgroup Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/ntc" xmlns="http://drupal.org/project/og">Teaming &amp;amp; Conferencing Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/slemag" xmlns="http://drupal.org/project/og">SUSE Linux Enterprise Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/ism" xmlns="http://drupal.org/project/og">Identity &amp;amp; Security Management Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/gwmag" xmlns="http://drupal.org/project/og">GroupWise Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions" xmlns="http://drupal.org/project/og">Cool Solutions</group>
 <group domain="http://www.novell.com/communities/partners/endusercomputing" xmlns="http://drupal.org/project/og">End-User Computing</group>
 <pubDate>Wed, 04 Nov 2009 09:28:47 -0700</pubDate>
 <dc:creator>ssalgy</dc:creator>
 <guid isPermaLink="false">9225 at http://www.novell.com/communities</guid>
</item>
<item>
 <title>BrainShare Jacket Promotion</title>
 <link>http://www.novell.com/communities/node/9223/brainshare-jacket-promotion</link>
 <description> &lt;p&gt;Get a free jacket by being one of the first 400 to register for BrainShare 2010 using this registration code: jacket. Sign up and share the news with your friends. The red and gray, athletic jacket is the perfect jacket for the spring weather in Utah. Jackets will be available for pick up at the registration booth on Monday, March 22, 2010.&lt;/p&gt;
 &lt;div class=&quot;og_rss_groups&quot;&gt;&lt;ul class=&quot;links&quot;&gt;&lt;li class=&quot;first last og_links&quot;&gt;&lt;a href=&quot;/communities/coolsolutions/zenworks&quot; class=&quot;og_links&quot;&gt;ZENworks Cool Solutions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description>
 <comments>http://www.novell.com/communities/node/9223/brainshare-jacket-promotion#comments</comments>
 <category domain="http://www.novell.com/communities/topic/brainshare-2010">BrainShare 2010</category>
 <group domain="http://www.novell.com/communities/coolsolutions" xmlns="http://drupal.org/project/og">Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/gwmag" xmlns="http://drupal.org/project/og">GroupWise Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/ism" xmlns="http://drupal.org/project/og">Identity &amp;amp; Security Management Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/slemag" xmlns="http://drupal.org/project/og">SUSE Linux Enterprise Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/ntc" xmlns="http://drupal.org/project/og">Teaming &amp;amp; Conferencing Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/workgroup" xmlns="http://drupal.org/project/og">Workgroup Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions/zenworks" xmlns="http://drupal.org/project/og">ZENworks Cool Solutions</group>
 <pubDate>Tue, 03 Nov 2009 00:00:00 -0700</pubDate>
 <dc:creator>mattclayton</dc:creator>
 <guid isPermaLink="false">9223 at http://www.novell.com/communities</guid>
</item>
<item>
 <title>Drivers vs DriverSets vs Servers in Identity Manager</title>
 <link>http://www.novell.com/communities/node/9200/drivers-vs-driversets-vs-servers-identity-manager</link>
 <description> &lt;p&gt;Driver vs Driver Set vs Servers in Identity Manager:&lt;/p&gt;
&lt;p&gt;Sometimes I get confused within Novell Identity Manager, as there are many moving parts with multiple bits and pieces to contend with.&lt;/p&gt;
&lt;p&gt;If you have not read through David Gersic&#039;s excellent series on the basics of how Identity Manager works, then you really should.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6679/guided-tour-novell-identity-manager&quot;&gt;A Guided Tour of Novell Identity Manager - Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6696/guided-tour-novell-identity-manager&quot;&gt;A Guided Tour of Novell Identity Manager - Part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/6697/guided-tour-novell-identity-manager&quot;&gt;A Guided Tour of Novell Identity Manager - Part 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;David does a great job of taking the typical &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2869&quot;&gt;&lt;acronym title=&quot;Novell iManagerA browser-based management utility included with NetWare 6. In ZENworks Server Management, it enables administrators to manage Tiered Electronic Distribution (TED) objects, agents, and processes from any location where the required version of Internet Explorer is available.&quot;&gt;iManager&lt;/acronym&gt;&lt;/a&gt; or Designer view, that you would see when working on an Identity Manager project and walking through it item by item.&lt;/p&gt;
&lt;p&gt;The primary difference between the iManager and Designer view, would be that in iManager to &#039;fishbone&#039; diagram is laid on its side, right to left, left to right, and in Designer it is top to bottom.  Personally, Designers approach works much better for me, as I am a smidgen right-left dyslexic, but can remember up and down directions much better.  (I find gravity more digestible than right and left, go figure!)&lt;/p&gt;
&lt;p&gt;On top of all the policies, and their order or execution, and why they execute, that David explains, there is further complexity in the use of DirXML Script to write any of the rules. &lt;/p&gt;
&lt;p&gt;There is lots of content on the topic of using DirXML Script, more than is worth linking too, but the nice thing is that the names of the various tokens are pretty good.  For example, the send-email Action you see in Policy Builder seems pretty straightforward (which is really a &amp;lt;do-send-email&amp;gt; token) and really is.  Some subtly exists, which the help is actually often pretty good at dispelling. &lt;/p&gt;
&lt;p&gt;Thus most of the articles you will see talking about tokens specifically, will focus on the subtle stuff, that does not really make it entirely into the documentation.  For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/5818/different-attribute-options-identity-manager&quot;&gt;The different attribute options in Identity Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/5920/ism-more-thoughts-sourcedestinationoperation-attribute-tokens-identity-manager&quot;&gt;More thoughts on Source/Destination/Operation attribute tokens in Identity Manager&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These first two, discuss the subtle and important differences between the Attribute, Source Attribute, and Destination Attribute tokens as well of the benefits of using each.&lt;/p&gt;
&lt;p&gt;Here are some more generally interesting token articles that can be helpful.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/4337/parsedn-token-identity-manager-and-some-its-limitations&quot;&gt;ParseDN Token in Identity Manager and Some of its Limitations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/5687/examples-using-parsedn-token-identity-manager&quot;&gt;Examples of using the ParseDN Token in Identity Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/4906/the-query-token-identity-manager&quot;&gt;The Query token in Identity Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/2209/unique-name-token-functionality-idm-35&quot;&gt;Unique Name Token Functionality in IDM 3.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/3034/reformat-operation-attribute&quot;&gt;Reformat Operation Attribute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/2572/using-time-tokens-idm-35&quot;&gt;Using the Time Tokens in IDM 3.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.novell.com/communities/node/1903/idm-35-update-new-features&quot;&gt;IDM 3.5 - Update on New Features&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On top of the &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/3000&quot;&gt;&lt;acronym title=&quot;In ZENworks Desktop Management, ZENworks Handheld Management, and ZENworks Server Management, a set of rules that define how workstations, handheld devices, and servers can be configured and controlled, including application availability and access, file access, and the appearance and contents of individual desktops. Policies are contained within policy packages, where they are also administered and customized.&quot;&gt;policy&lt;/acronym&gt;&lt;/a&gt; flow, DirXML Script, there is a further lower level concern.&lt;/p&gt;
&lt;p&gt;The basic unit in Identity Manager is an object.  Probably the lowest level is the Policy object (could be a Style sheet object, or a Mapping table, or a ECMA Script object, but you get the idea).&lt;/p&gt;
&lt;p&gt;These objects exist in containers.  There is a pair, the Subscriber and Publisher containers, meant to corral the appropriate objects into reasonable locations, to make finding them easier.&lt;/p&gt;
&lt;p&gt;With the release of Identity Manager 3.5 and the change in policy linkage, it is possible to store them pretty much anywhere inside the driver set (heck you could probably get it to use an appropriate object anywhere in the tree, but I have never really tried that).  This is pretty common in the use of Library objects now, so that one set of rules could be used in multiple drivers.&lt;/p&gt;
&lt;p&gt;The Subscriber and Publisher containers exist below the Driver object.  At the same level is usually the Schema Map, Filter, and Input/Output transforms.&lt;/p&gt;
&lt;p&gt;Drivers reside inside Driver Set objects.  The Driver Set object is often made into an &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/3276&quot;&gt;&lt;acronym title=&quot;A distributed, replicated naming service that maintains information about and provides access to a list of objects that represent network resources, such as network users, servers, printers, print queues, and applications. The directory is physically stored as a set of database files on a server. If the server hosts file system volumes, these files are on volume sys:. If no volumes are present, the directory is stored on the server&#039;s local disk. eDirectory tightly integrates Novell Security Services for e-commerce (PKI, cryptography, and authentication services), allowing developers to build applications that can be accessed and managed across the entire network through explicit policies.&quot;&gt;eDirectory&lt;/acronym&gt;&lt;/a&gt; &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2987&quot;&gt;&lt;acronym title=&quot;1. A logical division of a computer hard disk created in order to have different operating systems on the same hard disk or to create the appearance of having separate hard disks for file management and so forth..&quot;&gt;partition&lt;/acronym&gt;&lt;/a&gt; boundary.  I happen to strongly disagree with the interface in Designer and iManager that defaults to creating the Driver Set object as a partition if you are not careful.  That it should be a partition, I understand the reasoning.  That it should be a default, I think is a mistake, because before you partition an &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/2817&quot;&gt;&lt;acronym title=&quot;A Directory tree that consists of eDirectory objects such as multiple levels of organizational units, users, groups, and other network resources.&quot;&gt;eDirectory tree&lt;/acronym&gt;&lt;/a&gt;, you should check and be sure that the tree is healthy, time is syncing, servers are communicating, and what not.  Otherwise, you are opening your self up to a world of hurt. &lt;/p&gt;
&lt;p&gt;Driver Sets are assigned to servers, which are the where the actual Identity Manager binaries are executed. &lt;/p&gt;
&lt;p&gt;Now there comes a little bit of complexity.&lt;/p&gt;
&lt;p&gt;One server can host only one Driver Set at a time.  One Driver Set can be hosted by multiple servers.  One Driver Set can contain multiple drivers.  Each driver should only run on a single server at a time (though in principle they could run on more than one at once, which probably would create bad end results).  &lt;/p&gt;
&lt;p&gt;Now was that clear? &lt;/p&gt;
&lt;p&gt;The key is:  A Driver Set can be assigned to multiple servers.  However a single server can only host a single Driver Set.  &lt;/p&gt;
&lt;p&gt;Even that has a quibble, since one physical server could host multiple virtual machines, each with an eDirectory instance, or on Unix/Linux even host multiple eDirectory instances on a single server instance.  Perhaps a better criteria is that a single eDirectory instance can only host a single Driver Set at a time.&lt;/p&gt;
&lt;p&gt;Thus many drivers can be in a driver set, on several servers, with any combination of drivers running on any of those servers.  &lt;/p&gt;
&lt;p&gt;The servers can be any platform that eDirectory and Identity Manager is supported on, such as Windows, Netware (pre 3.6 alas, since &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/1591&quot;&gt;&lt;acronym title=&quot;An object-oriented programming language developed by Sun Microsystems, Inc. to create executable content (ie, self-running applications) that can be easily distributed through networks like the Internet. Developers use Java to create special programs called applets that can be incorporated in web pages to make them interactive. A Java-enabled web browser is required to interpret and run the Java applets.&quot;&gt;Java&lt;/acronym&gt;&lt;/a&gt; 1.5 which IDM 3.6 relies on, has not been back ported to Netware), Solaris, Linux, and &lt;a class=&quot;glossary-term&quot; href=&quot;/communities/glossary/term/3269&quot;&gt;&lt;acronym title=&quot;Advanced Interactive ExecutiveAn IBM version of the UNIX operating system.&quot;&gt;AIX&lt;/acronym&gt;&lt;/a&gt;.  &lt;/p&gt;
 &lt;div class=&quot;og_rss_groups&quot;&gt;&lt;ul class=&quot;links&quot;&gt;&lt;li class=&quot;first last og_links&quot;&gt;&lt;a href=&quot;/communities/coolsolutions&quot; class=&quot;og_links&quot;&gt;Cool Solutions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description>
 <comments>http://www.novell.com/communities/node/9200/drivers-vs-driversets-vs-servers-identity-manager#comments</comments>
 <category domain="http://www.novell.com/communities/taxonomy/term/6">DirXML</category>
 <category domain="http://www.novell.com/communities/coolsolutions/edirectory">eDirectory</category>
 <category domain="http://www.novell.com/communities/coolsolutions/nim">Identity Manager</category>
 <category domain="http://www.novell.com/communities/product/identitymanager/identitymanager35">Identity Manager 3.5</category>
 <group domain="http://www.novell.com/communities/coolsolutions/ism" xmlns="http://drupal.org/project/og">Identity &amp;amp; Security Management Cool Solutions</group>
 <group domain="http://www.novell.com/communities/coolsolutions" xmlns="http://drupal.org/project/og">Cool Solutions</group>
 <pubDate>Thu, 29 Oct 2009 12:04:05 -0600</pubDate>
 <dc:creator>geoffc</dc:creator>
 <guid isPermaLink="false">9200 at http://www.novell.com/communities</guid>
</item>
</channel>
</rss>
