go to post Eduard Lebedyuk · Apr 18, 2016 Sure. To see deprecated classes for some version execute this query against it: SELECT ID, Description FROM %Dictionary.ClassDefinition WHERE LOWER(Description) [ 'deprecated' To see deprecated methods execute this query: SELECT parent AS "Class", Name AS "Method", Description FROM %Dictionary.MethodDefinition WHERE LOWER(Description) [ 'deprecated' And to see deprecated properties execute this query: SELECT parent AS "Class", Name AS "Method", Description FROM %Dictionary.PropertyDefinition WHERE LOWER(Description) [ 'deprecated' Note, that this queries only return classes/methods/properties which contain "deprecated" in their definition. To catch deprecated inherited classes/methods/properties query %Dictionary.CompiledClass/%Dictionary.CompiledMethod/%Dictionary.CompiledProperty instead.
go to post Eduard Lebedyuk · Apr 18, 2016 Hello.How can I get/set pool size value for a Production item programmatically? I can't find it in a "Settings Defaults" list.
go to post Eduard Lebedyuk · Apr 15, 2016 Could you please tell what do you want to achieve with making 'Open as read-only' setting default?
go to post Eduard Lebedyuk · Apr 11, 2016 Okay.Please note, that only legacy IF sets $TEST and it is also one line long. New IF {} (3 lines, with brackets) does not set a $TEST variable.
go to post Eduard Lebedyuk · Apr 11, 2016 Consider adding links to cache documentation from the page that describes the issue, we now have version agnostic urls even. For example this issue could use a link to documentation. Another question is: what's wrong with postconditionals? They exist not only in caché objectscript and in fact very useful as they allow elimination of all 3 lines blocks with one if condition and one action to execute if if is true. Can I disable an issue type for a project?
go to post Eduard Lebedyuk · Mar 31, 2016 Sure. You could use %CELLZERO instead: WITH MEMBER [MEASURES].[Revenue as Percent of Total] AS 'Measures.[Amount Sold] / %MDX("select Measures.[Amount sold] on 1 from holefoods","%CONTEXT","filters|columns")',FORMAT_STRING='##.##%;;;;' MEMBER [MEASURES].[Revenue Percent Cumulative] AS 'Measures.[Revenue as Percent of Total] + %CELLZERO(0,-1)', FORMAT_STRING='##.##%;;;;' SELECT {[Measures].[Amount Sold],[MEASURES].[REVENUE PERCENT CUMULATIVE]} ON 0, NON EMPTY ORDER([Product].[P1].[Product Category].Members,Measures.[Amount Sold],BDESC) ON 1 FROM [HoleFoods] Jokes aside, why do you need to remove %CELL usage?
go to post Eduard Lebedyuk · Mar 30, 2016 Thanks. Removed that as it's useless without zzzz variables.
go to post Eduard Lebedyuk · Mar 30, 2016 I wondered actually, what for do you prefix all variable names with "zzzz".
go to post Eduard Lebedyuk · Mar 30, 2016 There is also this way: set p = ##class(%ZEN.proxyObject).%New() set p.a = 1 set p.b = 2 do p.%ToJSON() kill p.%data("b") do p.%ToJSON() kill p.%data("b") would completely remove b property. But better use Caché 2016.1 with native JSON support.
go to post Eduard Lebedyuk · Mar 30, 2016 Another queue processing sample is now available in this GitHub repository, courtesy of Vladimir Prushkovskiy.
go to post Eduard Lebedyuk · Mar 29, 2016 Formatted your code a little. getst(getvars, StBeg, temp) ; Save call stack in local or global array ; In: ; getvars = 1 - save variables defined at the last stack level ; getvars = 0 or omitted - don't save; default = 0 ; StBeg - starting stack level for save; default: 1 ; temp - where to save ($name). ; Out: ; temp - number of stack levels saved ; temp(1) - call at StBeg level ; temp(2) - call at StBeg+1 level ; ... ; temp(temp) - call at StBeg+temp-1 level ; ; Calls are saved in format: ; label+offset^rouname +CommandNumberInsideCodeLine~CodeLine w/o leading spaces" ; E.g.: ; temp(3) = First+2^%ZUtil +3~i x=""1stAarg"" s x=x+1 s c=$$Null(x,y)" ; Sample calls: ; d getst^%ZUtil(0,1,$name(temp)) ; save calls w/o variables in temp starting from level 1 ; d getst^%ZUtil(1,4,$name(^zerr($i(^zerr)))) ; save calls with variables in ^zerr starting from level 4 new loop,zzz,StEnd set getvars = $get(getvars) set StBeg = $get(StBeg, 1) kill @temp set @temp = 0 set StEnd = $STACK(-1)-2 for loop = StBeg:1:StEnd { set @temp = @temp+1 set @temp@(@temp) = $STACK(loop, "PLACE") _ "~" _ $zstrip($STACK(loop, "MCODE"), "<W") if getvars,(loop=StEnd) { set zzz="" for { set zzz = $order(@zzz) quit:zzz="" set @temp@(@temp,zzz) = $get(@zzz) } if $zerror'="" { set @temp@(@temp,"$ze") = $zerror } } } quit 1
go to post Eduard Lebedyuk · Mar 29, 2016 You can fill $zerror by passing a name into LOG^%ETN: Do LOG^%ETN("test") It would record your current $zerror value, replace it with "test", execute LOG captue, and at the end restore $zerror to what it was before the call.
go to post Eduard Lebedyuk · Mar 24, 2016 I assume that's a comment to my answer?If yes, here's the working code. Maybe I missed some changes in my answer. Because, again, I needed to do too much changes to run the code in the first place.
go to post Eduard Lebedyuk · Mar 24, 2016 I made the following changes: 1. Changed Set mimePart.ContentType = "application/pdf" to Set mimePart.ContentType = "application/x-object" 2. Commented out: Do mimeMsg.SetHeader("Content-Disposition","attachment; name=""Files1""; filename="""_docName_"""") Set mimeMsg.ContentTransferEncoding = "base64" 3. Uncommented: //Set req.ContentType = "multipart/form-data;boundary=" _mimeMsg.Boundary After these change I received non-empty files object. "files": { "uploadedfile": "cd \\\r\n@echo start >> date.txt\r\n" } Howether. Here's some tips on how to ask questions like these (with not working code samples): 1. It must run everywhere. Remove the calls to other code (hardcode values if needed), like: ##class(HData.SiteSettings).GetFaxLogin() 2. Remove unused arguments, like coverpath 3. Remove non essential code like: Set req.SSLConfiguration = "CardChoice" Do req.InsertFormData("Username",##class(HData.SiteSettings).GetFaxLogin()) Do req.InsertFormData("Password",##class(HData.SiteSettings).GetFaxPassword()) Do req.InsertFormData("ProductId",##class(HData.SiteSettings).GetFaxProductId()) Do req.InsertFormData("cookies","false") Do req.InsertFormData("header","header") //Create job name for fax Set sendDate = +$H Set sendTime = $P($ZTIMESTAMP,",",2)+(15*60) Set schedDate = $ZDATETIME(sendDate_","_sendTime,1,4) Set schedDate = $E(schedDate,1,16)_" "_$E(schedDate,17,18) Set docList = $LFS(docpath,"\") Set docName = $LISTGET(docList,$LL(docList)) Do req.InsertFormData("JobName",schedDate_docName) //format phone number and set billing code Set num = $REPLACE(phone,"-","") Do req.InsertFormData("BillingCode",num) Do req.InsertFormData("Numbers1",num) //get notification email Set email = ##class(HData.SiteSettings).GetFaxNotifyEmail() If (email '= "") Do req.InsertFormData("FeedbackEmail",email) 4. Comment out unused and misleading code paths like Set base64 = ##class(%SYSTEM.Encryption).Base64Encode(docStream) Set mimeMsg.ContentTransferEncoding = "base64" 5. Provide a GitHub Gist snippet of an xml file (with the code) to import and write how to run it. Your goal, is to make it extremely easy for everyone to take a look at your snippet. All the process must consist of these two steps: Drag&Drop xml file into StudioCopy&Paste a line into a terminal
go to post Eduard Lebedyuk · Mar 18, 2016 I meant: write a new class with method generator. And inherit from it.
go to post Eduard Lebedyuk · Mar 18, 2016 Since XMLEnabled class can be not persistent and, therefore, not have an extent at all, there is no such method. If you need to write XMLExportToFile() for several classes you can write method generator which generates a method that would:Use current extent queryIterate through itOutput each object into a fileAnd inherit all classes, in which you have a need of XMLExportToFile() method from this class.