Jump to content


  • Content count

  • Joined

  • Last visited

  • Days Won


cdtj last won the day on August 24

cdtj had the most liked content!

Community Reputation

23 Excellent


About cdtj

  • Rank
    Level 7 Contributor
  • Birthday 01/01/1970

Contact Methods

  • Skype

Profile Information

  • Location
  • Interests
    looking for the fulltime job or remote one

Recent Profile Visitors

969 profile views
  1. sorry for necroposting, I had the same error which was ignored for years and now I figured out the rootcause. incorrect references in notification templates can cause this error too.
  2. hi, you can try to use format function, example: format("chg.chg_ref_num IN '%s' AND nr.zkpi IN '1'", chg_num); Regards, cdtj
  3. hi, as far as i know you can specify any existing attribute as part of xml file and then upload it using grload, example: <ci> <some other attrs>.......</some other attrs> <resource_contact>cnt:UUID_HERE</resource_contact> </ci> or if this will not work, try to use text_api to map attrs: https://docops.ca.com/ca-service-management/14-1/en/reference/ca-service-desk-manager-reference-commands/technical-reference/ca-sdm-text-api-interface Regards, cdtj
  4. feels like you got it right! but if you want to make unversal logic that work with any analyst in any group, the hardest part will be writing optimal sql query to fetch unread logs, how do you plan to handle scenario when member of N-count of groups will open a ticket? if making logic over analyst not over group, this a bit primitive example could help: https://communities.ca.com/people/cdtj/blog/2015/07/29/custom-webengine-op-who-is-currently-watching-object where 2 events: on page load script creates new db entry and on page close it deletes it. If db entry exists it means that object in decided state. Ignoring db performance, schema and algoritm could be: Schema: z_alg_unread: analyst SREL cnt, log SREL alg; Logic: if analyst opens log list, check every log entry; if log was read with someone else comapre their groups with current analyst; if group match found do not highlight log, otherwise - highlight; if analyst reads highlighted log entry, create db record for this analyst and this log entry. But this will work very very very slow, sorry for my fantasies Regards, cdtj
  5. hi, NoVaLue message poiniting to NX.ENV configuration file, you can try to reconfigure SDM using pdm_configure cmd. But if you can, better to raise CA Support ticket. Regards, cdtj
  6. hi, to perform this customization you need to have experience in: jquery, ajax, spel (including webengine spel). possible scenario: - publish new table (z_alg_unread, for example) with followed attrs: SREL cr, SREL alg, int readflag (default 0); - publish new QREL relation from cr to z_alg_unread with condition "WHERE readflag 0" to dispaly unread activites count; - register webengine op to switch readflag; - using jquery fetch unread activities and pass their ids to webengine op with ajax query; - use jquery to switch display settings (highlight background for read/unread, etc), keep unmarked ids to do not perform multiple actions for a single object; Regards, cdtj
  7. you can disable menu item for ticket on creation phase, 1. get decided menubar: in roles configuration interface you can find form name for menu for specified role, ex: menubar_sd.htmpl 2. find status_change menu object, it will look like: <PDM_OBJECT> htmpl_str = "+HTMPL="; if ( factory == "cr" ) // SDT 19319 - Added for ITIL vertical htmpl_str += "request_status_change.htmpl"; else if ( factory == "chg" ) htmpl_str += "order_status_change.htmpl"; else if ( factory == "iss" ) htmpl_str += "issue_status_change.htmpl"; <PDM_MACRO name=menuItemLocal label="Update_Status..." function="JavaScript: popupActivityWithURL('\" + query_str1 + \"ST\" + htmpl_str +\"','status')"> </PDM_OBJECT> 3. add condition: if ((typeof(w.argID) != "undefined") && (w.argID > 0)) { <PDM_MACRO name=menuItemLocal label="Update_Status..." function="JavaScript: popupActivityWithURL('\" + query_str1 + \"ST\" + htmpl_str +\"','status')"> } 4. refresh web cache (pdm_webcache -H). PS: otherwise you can punish employees who use that workaround to create tickets in a wrong status Regards, cdtj
  8. afaik there is no possibility to call status change activity for unsaved ticket
  9. hi, you can disable status dropdown for newly created tickets on form level, condition could be: <PDM_IF "$args.id" == "0"> <PDM_MACRO name=dtlReadonly attr=status> document.write('<input type="hidden" name="SET.status" value="OP">'); // OP is status code for OPEN status <PDM_ELSE> <PDM_MACRO name=dtlDropdown hdr="Status" attr=status factory=crs_cr lookup=no> // crs_cr is factory for request statuses, use crs_in for incidents </PDM_IF> Regards, cdtj
  10. Add a contact list in a configuration item

    hi, you can create new many-to-many relation (LREL or BREL), common inf could be found here: https://communities.ca.com/docs/DOC-231158314 Regards, cdtj
  11. PDM_List over two factories?

    hi, you can refer to outer PDM_LIST wrapper from inner levels using PREFIX: <PDM_LIST PREFIX=listnrs FACTORY=nr WHERE="location.id=U'$args.customer.location.id' and z_zd IS NOT NULL" ESC_STYLE=HTML> <!-- optional output for nr list: $listnrs.name --> <PDM_LIST PREFIX=listorgs FACTORY=org WHERE="org.id = U'$listnrs.z_someattr'" ESC_STYLE=HTML> <!-- output for org list: $listorgs.name --> </PDM_LIST> </PDM_LIST> Regards, cdtj
  12. Create local user

    Hi, go to Admin tab > Roles > Access type, then create your own (or copy existing). On a first tab of access type form will be configuration for external authentication, you need to set PIN-Use validation type and specify attribute (on cnt factory) which will store contact's password. Regards, cdtj
  13. hi, i havent jq experience but I tried this one and row were deleted. jq("#cmdbVersionDetails tr:contains(\"Last changed by\")").remove(); regards, cdtj
  14. Hi, you can use detailRowHdr("header text") and detailSetRowdata("text <b>html tags works here<b>") to insert custom HTML code, but I think this will look ugly Regards, cdtj
  15. spel customization could do the trick. I havent experience working with tenants and cant be sure about correct syntax but code should be very simple: // FileName: z_compare_tenants.mod MODIFY cr PRE_VALIDATE z_compare_tenants() 71000 FILTER(EVENT("INSERT")); // FileName: z_compare_tenants.spl cr::z_compare_tenants(...) { if (customer.tenant != tenant) { set_error(1); set_return_data(format("Unable to create %s in another tenant [%s]", type.sym, customer.tenant.name)); } }