Jump to content


Popular Content

Showing content with the highest reputation since 12/29/2015 in all areas

  1. 3 points
    The following is a list of terms used in descussing different aspects of CA Service Desk Manager. Term Description $NX_ROOT refers to the installation directory of Service Desk
  2. 2 points
    We're back! And there have been some changes! What did NOT change? SDU is using the same forum software All forum content is intact All wiki content is (or soon will be) available under the Articles section The Articles section will be editable by users, like the wiki was Everyone's accounts, passwords, and content are all intact What DID change? The wiki interface is gone The forum software has been upgraded (7 years overdue!) Reputation system - you can "like" posts and other content Social Media - you can share content to many different social media sites The original layout/look of the site has been replaced with a standard template, in an effort to bring the site back online quickly Advertising - for the moment, the advertising has been removed New host - the site is now hosted by the makers of the forum software. This is more expensive, but should result in easier maintenance and timely software upgrades. What caused SDU to shut down in the first place? Okay, so a few weeks ago, the previous company hosting SDU suspended the account because someone found a way into my account and either both malware files throughout the file system as well as attach malware code to existing, legitimate files. We're talking over a thousand affected files in a sea of over 15,000 files. At first, it looked like a manageable set to review one at a time and fix/delete. However, I soon realized just how pervasive the damage was and realized it was not reasonable to fix everything. And the host would not reactivate the account until the malware had been removed. On top of that, my host account was about to renew for another 2 years' of service. I saw no easy way to get SDU back up and operational, so I decided to pull the plug. I did NOT want to do that, and hated to see all of that content just disappear. So, why is SDU back in business? Well, mainly because of you. In the weeks since shutting down SDU, I've received quite a few emails from you guys thanking us for hosting SDU, offering stories of how SDU has helped you in the past, and many, many offers to help bring the site back or at least make a copy of the content available. I decided to break out the defibrillator and see if I couldn't get find a way to revive SDU. This is the result! I hope you like it! Gregg
  3. 2 points
    it's a Christmas miracle! Many thanks!
  4. 2 points
    Overview CA does not provide a GUI supported method for creating or modifying Condition Macros or Action Macros. However, the function that these types of Macros provides can be crucial. This article explains the steps to take for creating new or editing existing. Keep in mind, CA does not support any changes to the default Action Macros or Condition Macros and will not support any that you create. It is also highly recommended that you never modify the defaults, but rather copy them and create your own custom ones. Procedures Step 1. Extract a Sample Macro The first step is to extract a macro from the system and use this as guide. Take note of the macro's name the enter the following command: pdm_extract -f "SELECT del,fragment,lock_object,ob_type,sym,type FROM Spell_Macro WHERE sym = 'sample macro name'" > yourfile.txt Step 2. Add Your Script Now that you have the sample macro extracted from the system, modify the contents of the 'fragment' column to suit your scripting needs. Remember to use \\0012 for your carriage returns and \ to cancel out the double quotes in your script. Also, be sure to change the value of the 'sym' column or your new macro will not be loaded. Step 3. Load New Macro Run the following command to load your new macro into the system: pdm_load -f yourfile.txt -i -v Step 4. Extract New Macro for Additional Changes Run the following command to extract your new macro if additional changes are required: pdm_extract -f "SELECT * FROM Spell_Macro WHERE sym = 'sample macro name'" > yournewfile.txt Step 5. Uploading Changes Run the following command to load your modified macro into the system: pdm_load -f yournewfile.txt -v Notice there is no -i this time. A -i is only used when "inserting" a new macro, not when editing an existing one.
  5. 1 point
    Hi, you need to define AUDITLOG param to your attribute, here is KD how to perform this: http://www.ca.com/us/support/ca-support-online/product-content/knowledgebase-articles/tec616368.aspx Regards, cdtj
  6. 1 point
    Look at the recent topic answered by @redwards: You need to use the Web Screen Painter to add a new field on the 'alg' object instead of the 'call_req' object (as it's referenced in the topic I mentioned) - from the screenshot it looks like you want to add the checkbox on the Activity Log screen.
  7. 1 point
    Great Gregg and your team !.. Really SDU helps a lot for me and most of the people who are beginners to CA Service Desk. Have a wonderful year ahead and all the best..
  8. 1 point
    Welcome Back! ! ! Great to see, and here's to another long run. There was certainly goodwill over at CA Communities when users heard about this: https://communities.ca.com/community/ca-service-management/blog/2015/12/09/the-end-of-an-era-farewell-and-thank-you-servicedeskuserscom I'm always happy to point people here as a great resource. Kyle_R.
  9. 1 point
    Fantastic job Gregg!
  10. 1 point
    Well done sir. Many thanks for all your efforts.
  11. 1 point
    Thank you! This is a great Christmas present.
  12. 1 point
    Overview Auto-assignment is the functionality that is intended to automatically set the ticket Assignee based on various factors, such as End User Location, Workshift, and Analyst availability to name a few. The process flow below helps to understand the thought process behind the auto-assignment process. History This article was originally a wiki article created by Gityerfix in 2008.
  13. 1 point
    Hi All, Realy T5U3369 solved this problem. Open a case on Support
  14. 1 point
    Perhaps you could share with the forum (here or create a wiki).
  15. 1 point
    Look in the BOXI Universe under 'Resource/CMDB/Configuration Item Extended/Extension Tables' and you should find the Extension Table for the Family you're trying to report on. If the attributes you're looking for are default attributes (i.e. not site local or customized), then you should find them under the corresponding Extension Table folder (e.g. 'CI Enterprise Service').
  16. 1 point
    Ask CA Support for T5U3369, this could fix your LDAP import problem.
  17. 1 point
    The integration is configured thru a Configuration Policy on CA ITCM, all atributes has a short description that will help you on configure it. But if you are talking about use the discovered hardware by ITCM on CA SDM i suggest you to check the command "pdm_discimp" on SDM server, i'm not sure if pdm_discimp is the best option but.....
  18. 1 point
    I think, it was the "Use Stricter Rules?" parameter in Survey Template. Just check it.
  19. 1 point
    Here is a sample code: if (argID != 0) <PDM_MACRO name=button caption="Event History" func="show_evt('cnt', 'atev', argID)" hotkey_name="Event History" id="SHOW_EVT_HISTORY" width=0> <PDM_MACRO name=btnEndRow> </PDM_IF> <PDM_MACRO name=dtlStart scroll=true> // Custom BEGIN: add contact image <PDM_IF "$args.type.id" != "2308"> </script> <table width="90%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="150" align="center" > <img src="$CAisd/sitemods/img/imgFolder/generic.png" witdh="128" height="128" id="person_img" name="person_img" onerror="this.src='$CAisd/sitemods/img/marca/person.png';" /> <PDM_IF "$args.z_employee_id" != ""> <script type="text/javascript"> var zPhotoURL = "$args.z_employee_id"; var imgUrl = "$CAisd/sitemods/img/imgFolder/" + zPhotoURL + ".jpg"; document.getElementById('person_img').src = imgUrl; </script> </PDM_IF> </td> <td align="right" style="padding-right: 5px;"> <script type="text/javascript"> </PDM_IF> // CUSTOM END Some comments: * this is part of detail_cnt.htmpl, the CUSTOM BEGIN/END show the custom code, you'll find the position to add this code by the previous code section (look up for 'Event History' button and find the portion in the page). * it assumes there is a custom attribute (z_employee_id) that exists on the 'cnt' object and each photo of an employee exists in the $NX_ROOT/site/mods/www/wwwroot/images/imgFolder folder. If you can identify an user by other attribute (such as userid) then you can replace z_employee_id with this attribute in the code above. * the code checks if the user accessing the page is an Analyst, so the info is displayed only for them.
  20. 1 point
    I finally found a solution, so simple, sufficed install an agent on the remote server.
  21. 1 point
    You must provide a new site-defined trigger for your custom field to trigger activity based on updates. The syntax is as follows: This file has a command of the type, POST_CI val_fieldupdate_site(persistent_id, audit_userid, CHANGED_ONLY, zattr) 111 FILTER( EVENT("UPDATE") ); where zattr is your custom object. if you have more than one custom object, add them all separated by commas. This trigger is entered via Web Screen Painter's Schema Designer for table cr (Request), within Site-Defined Triggers under the Advanced tab. If you examine the file cr_site.mod under site\mods in your CA SDM installation, the comments will explain this in more detail. It will also show that this must be done for each custom object you wish to perform Activity logging on.
  22. 1 point
    I can see 2 ways of writing to your own table(s): 1) use HTMPL forms and java script: on your detail_alg.htmpl, add some logic that checks for a 'TR' type of activity, then somehow have another the detail_z_custom_table.htmpl file load in a hidden frame with the CREATE_NEW operand. You will need to find a way to submit that hidden frame as well. Disadvantages: - this logic will only work if the TR is done from the detail_alg form. Not if it's done by some web service, or automated event / other possibilites. - logic runs mainly on client side, so out of control (javascript must be enabled, ...) - that last part: 'submit the hidden frame' could be a tricky thing (you need to make sure it's been loaded, has all values populated, only then submit) TIP: in r12.5 I believe you can create your own server operations (like CREATE_NEW), so there could be an easier/more direct way to do it! Sadly enough, your new operations need to be coded in Spell code :s 2) change the behavior of Service Desk by Majic/Spell code: this is achieved by setting up a server side trigger (not a DB trigger) in a mod file. This trigger would specify that whenever a TR activity is being saved some other code needs to run as well. That other code is a Spell function that you put in a spl file. Disadvantages: - Spell code is unsupported by CA - Spell code is undocumented, so you're never sure it will not do anything else than what you assume it's doing If you don't have any experience with Spell coding, this might indeed be tricky because it's already one of the more complex adaptations one could do. Basically, you'd need to retrieve all your values (agent doing the transfer, previous assignee, new assignee, ...), then initiate a group leader, create a new object of your z_custom_table type, set its values, then check in everything. That's why I referenced to that Wiki, it has all this in it (I only put the major parts in here to keep it simple): alg::z_write_to_new_table(...) { uuid uuidOldAssignee; uuid uuidNewAssignee; uuid uuidAgent; // set your values... (not sure what we all have in alg, need to check if we can find out the old and new values of the assignee and how) uuidOldAssignee = ...; uuidNewAssignee = ...; uuidAgent = ...; send_wait(0, top_object(), "get_co_group"); if (msg_error()) { logf (ERROR, "Error %s: could not get group leader", msg[0]); return; } object group_leader; group_leader = msg[0]; send_wait(0, group_leader, "checkout", dob); if (msg_error() && msg[0] != "NO") { logf(ERROR, "Error %s: checkout failed", msg[0]); return; } object custom_record; send_wait( 0, top_object(), "call_attr", "z_custom_table", "get_new_dob", NULL, NULL, group_leader); if (msg_error()) { logf (ERROR, "Error %s: could not get new z_custom_table", msg[0]); return; } custom_record= msg[0]; custom_record.oldassignee= uuidOldAssignee; custom_record.newassignee = uuidNewAssignee; custom_record.transferringagent = uuidAgent; send_wait(0, group_leader, "checkin"); if (msg_error()) { logf(ERROR, "Error %s: checkin failed", msg[0]); send_wait(0, group_leader, "uncheck"); return; } } Your trigger (on the ALG object) would look something like: POST_VALIDATE z_write_to_new_table() 1001 FILTER(EVENT("INSERT") && type = 'TR' ); I hope this helps, it's not 100% complete but should explain already most of what you'll need...
  23. 1 point
    Hi. pdm_load can be quite a helpfull tool, if you know how it works. Of course, pdm_load can do updates and inserts based on one file. But you have to know, how the data must look like. The question is, how can pdm_load determine, if it has to do an update or an insert for one single data record. If your loadfile includes the "id" column, it's quite simple: If a record for a given id is found, pdm_load will do an update to that record, if the id is not found in the db, pdm_load will insert a new record with the given id. Fine so far, but normaly in real world, you want to import/update data from external sources, and these sources do not know any internal ServiceDesk id values. Therefor, CA has invent the so called secondary keys. One or many columns within the ServiceDesk Schema for a single table can be marked as a secondary key (S_KEY). Take a look at the file site/ddict.sch. Here you will find all tables and columns known by ServiceDesk, and also, which columns do have the S_KEY attribute set. If no id column is given in your loadfile, all secondary key fields must be specified in the load file. When pdm_load works on such a file, the secodary key values will be used to search in the DB for existing records. From that point of view, it would make sense, that there is a unique index over all secondary key fields, because these fields will be used to uniquely identify a record. But this is a different story. If a record is found, this record will be updated, if no record is found, a new record with a new id will be created with the given data. For example. You want to load Request Areas. The ServiceDesk Table name is Prob_Category. A look into the ddict.sch file shows you, that the sym field is a secondary key. If your loadfile looks like TABLE Prob_Category sym description del { "sw.office.word", "This is a software problem with word", "0" } and you would do just a "pdm_load -f yourfile.dat", pdm_load would insert this record if it doesn't find an existing record with the sym field equals to "sw.office.word", otherwise it would do an update on the existing record. Hope that helps a bit. Regards ..........mikelm
  24. 1 point
    Well, I'm not an expert on this, but I see two things: Your function doesn't correctly calculate your local time: I assume the following: * In your environment the function DATEPART(dw, ...) will give back a 1 for Sunday, a 2 for monday, and so on * Your DST starts on the second sunday in March at 02:00 and ends at first Sunday in November at 02:00 If this is right, your function should look like CREATE FUNCTION [dbo].[GetDateFromEpoch] ( @Seconds int, @ConvertToLocalTime bit ) RETURNS datetime AS BEGIN DECLARE @datLocalDateTime datetime if(@ConvertToLocalTime = 0) BEGIN SET @datLocalDateTime = dateadd(s, @Seconds, '1/1/1970') END ELSE BEGIN DECLARE @datToCheck datetime SET @datToCheck = dateadd(s, @Seconds, '1/1/1970') DECLARE @intYear integer DECLARE @strMar1 varchar(18) DECLARE @strNov1 varchar(18) DECLARE @DayOfTheWeek integer DECLARE @DateDifference integer DECLARE @datDSTStarts datetime DECLARE @datDSTEnds datetime DECLARE @intGMTOffset integer /* Calculate when DST begins for the year in question */ SET @intYear = DATEPART(yyyy, @datToCheck); SET @strMar1 = CONVERT(varchar(18), @intYear) + '0301 02:00:00'; SET @DayOfTheWeek = DATEPART(dw, @strMar1); /* Day March 1 falls on in that year */ if(@DayOfTheWeek = 1) BEGIN SET @DateDifference = 7 /* Sunday is 1st day of the month */ END else BEGIN SET @DateDifference = 15 - @DayOfTheWeek; /* # of days between that day and the 2nd Sunday ("the second Sunday in March ", i.e. when DST begins)*/ END SET @datDSTStarts = DATEADD(dd, @DateDifference, @strMar1); /* Calculate when DST is over for the year in question */ SET @strNov1 = CONVERT(varchar(18), @intYear) + '1101 02:00:00'; SET @DayOfTheWeek = DATEPART(dw, @strNov1); /* Day Nov 1 falls on in that year */ if(@DayOfTheWeek = 1) BEGIN SET @DateDifference = 0 /* Sunday is 1st day of the month */ END else BEGIN SET @DateDifference = 8 - @DayOfTheWeek; /* # of days between that day and the 2nd Sunday ("the second Sunday in March ", i.e. when DST begins)*/ END SET @datDSTEnds = DATEADD(dd, @DateDifference, @strNov1); /* Determine if the date in question is in DST or not */ IF @datToCheck BETWEEN @datDSTStarts AND @datDSTEnds BEGIN SET @intGMTOffset = -4 /* DST */ END ELSE BEGIN SET @intGMTOffset = -5 /* No DST */ END SET @datLocalDateTime = DATEADD(hh, @intGMTOffset, @datToCheck) END RETURN @datLocalDateTime ENDNot that much changes, just the line "SET @DateDifference = 7 /* Sunday is 1st day of the month */". Otherwise, if the first march is a sunday in the year in question, your dst will begin already on the first sunday of march and not on the second one. Secondly, in your report, you are using this function with different parameters. For open_date, you are allways passing a 1 as the "ConvertToLocalTime" value, for resolve_date a 0. Why? If you pass a 0 to this function, no DST adjustment and no UTC adjustment (your timezone) will be done, never. This is the reason, your resolve date is wrongly calculated. My assumption is, that it is wrong all the time, because you allways pass a 0 as the ConvertToLocalTime parameter. And your calculated date difference is also wrong, because of the 0. Suggestion: From my point of view, you should allways pass a 1 in the ConvertToLocalTime parameter when calling your function GetDateFromEpoch. Hope that helps Regards ........mikelm
  25. 1 point
    Hi, I resolved my problem with the following code in detail_chg: function z_validate_kostenstelle(field) { if (field.value.length < 14) { alert("Bitte 14 stellige Kostenstelle eintragen"); field.focus(); } } <PDM_MACRO NAME=dtlTextbox hdr=Kostenstelle attr="z_kostenstelle" size=20 evt="onBlur=\\\"z_validate_kostenstelle(this)\\\""> Kind regards Sebastian