Three issues I've observed - two being what I believe is best described as a bug, and the other is a challenge that seems to have arisen when I try my alternative method of solving the problem.
Item 1 - Probably User Error
As I've been testing VisualCron, I've build a handful of jobs, but I want to disable all but one of them at any time, just so that if I do something that would normally trigger multiple jobs, only one goes off. I'd expect that I could achieve this by setting the Status on all the jobs except for the one I'm working on to "Inactive". However, if I have three jobs watching a folder for an XML file to be created there, and two appear with their 'Next Run' as "Inactive" and one is set to "Event Trigger (file)" - if I create that file, all three triggers will fire. The two 'Inactive' jobs will wake up and start processing.
Is this me, or is it a bug? If it's me, how the heck can I force those Jobs to stay inactive?
Item 2 -
Read XML task functionality.
I want to create a task that reads an XML file and evaluates the count() of items in an XML tree. Normally when doing old-fashioned scripting, I'd do this using XQuery; but it looked as though an XML Read task type might do it within VisualCron.
However, when I try something like:
declare namespace cr='urn:crystal-reports:schemas';count(//cr:FormattedAreaPair[@Level='3']).. with a specific file selected (a mapped drive of 'Z:', I selected a file I know is valid) with suitably lax credentials, I get an unhandled exception:
************** Exception Text **************
System.IO.DirectoryNotFoundException: Could not find a part of the path 'Z:\Inbox\-elev-2009-07.xml'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials)
at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
at System.Xml.XmlTextReaderImpl.OpenUrlDelegate(Object xmlResolver)
at System.Threading.CompressedStack.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.CompressedStack.Run(CompressedStack compressedStack, ContextCallback callback, Object state)
at System.Xml.XmlTextReaderImpl.OpenUrl()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
at System.Xml.XmlDocument.Load(XmlReader reader)
at System.Xml.XmlDocument.Load(String filename)
at UCTaskXMLNodeRead.DisplayTask()
at UCTaskXMLNodeRead.PreLoad()
at ubE55whN25V0eOGWPPZ.MBndt0h31w6BQExJO8A.PreLoad()
at ubE55whN25V0eOGWPPZ.MBndt0h31w6BQExJO8A.EDTL4r2Pq(Object , EventArgs )
at System.EventHandler.Invoke(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
VisualCronClient
Assembly Version: 5.3.1.33574
Win32 Version: 5.3.1.33574
CodeBase: file:///C:/Program%20Files/VisualCron/VisualCronClient.exe
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
System.Data
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll
VisualCron
Assembly Version: 1.0.1.33564
Win32 Version: 1.0.1.33564
CodeBase: file:///C:/Program%20Files/VisualCron/VisualCron.DLL
Infragistics2.Win.v9.1
Assembly Version: 9.1.20091.1000
Win32 Version: 9.1.20091.1000
CodeBase: file:///C:/Program%20Files/VisualCron/Infragistics2.Win.v9.1.DLL
Infragistics2.Shared.v9.1
Assembly Version: 9.1.20091.1000
Win32 Version: 9.1.20091.1000
CodeBase: file:///C:/Program%20Files/VisualCron/Infragistics2.Shared.v9.1.DLL
VisualCronAPI
Assembly Version: 1.0.3.33569
Win32 Version: 1.0.3.33569
CodeBase: file:///C:/Program%20Files/VisualCron/VisualCronAPI.DLL
Microsoft.VisualBasic
Assembly Version: 8.0.0.0
Win32 Version: 8.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
System.Xml
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
System.Configuration
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
9dorxb0t
Assembly Version: 1.0.1.33564
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
hid8csxx
Assembly Version: 1.0.3.33569
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
maj_pi8x
Assembly Version: 1.0.3.33569
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
mehvgalf
Assembly Version: 5.3.1.33574
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
SecureBlackbox
Assembly Version: 7.1.0.160
Win32 Version: 7.1.0.160
CodeBase: file:///C:/Program%20Files/VisualCron/SecureBlackbox.DLL
SecureBlackbox.IDEA
Assembly Version: 7.1.0.160
Win32 Version: 7.1.0.160
CodeBase: file:///C:/Program%20Files/VisualCron/SecureBlackbox.IDEA.DLL
Infragistics2.Win.UltraWinToolbars.v9.1
Assembly Version: 9.1.20091.1000
Win32 Version: 9.1.20091.1000
CodeBase: file:///C:/Program%20Files/VisualCron/Infragistics2.Win.UltraWinToolbars.v9.1.DLL
Infragistics2.Win.UltraWinEditors.v9.1
Assembly Version: 9.1.20091.1000
Win32 Version: 9.1.20091.1000
CodeBase: file:///C:/Program%20Files/VisualCron/Infragistics2.Win.UltraWinEditors.v9.1.DLL
Infragistics2.Win.Misc.v9.1
Assembly Version: 9.1.20091.1000
Win32 Version: 9.1.20091.1000
CodeBase: file:///C:/Program%20Files/VisualCron/Infragistics2.Win.Misc.v9.1.DLL
Infragistics2.Win.UltraWinGrid.v9.1
Assembly Version: 9.1.20091.1000
Win32 Version: 9.1.20091.1000
CodeBase: file:///C:/Program%20Files/VisualCron/Infragistics2.Win.UltraWinGrid.v9.1.DLL
Infragistics2.Win.UltraWinStatusBar.v9.1
Assembly Version: 9.1.20091.1000
Win32 Version: 9.1.20091.1000
CodeBase: file:///C:/Program%20Files/VisualCron/Infragistics2.Win.UltraWinStatusBar.v9.1.DLL
Infragistics2.Win.AppStylistSupport.v9.1
Assembly Version: 9.1.20091.1000
Win32 Version: 9.1.20091.1000
CodeBase: file:///C:/Program%20Files/VisualCron/Infragistics2.Win.AppStylistSupport.v9.1.DLL
System.Design
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Design/2.0.0.0__b03f5f7f11d50a3a/System.Design.dll
Accessibility
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
System.Web.Services
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Web.Services/2.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll
bxgcck8l
Assembly Version: 5.3.1.33574
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
System.Management
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Management/2.0.0.0__b03f5f7f11d50a3a/System.Management.dll
System.ServiceProcess
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.ServiceProcess/2.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll
hlelz9hc
Assembly Version: 1.0.1.33564
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
-cisvz6j
Assembly Version: 1.0.3.33569
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
Infragistics2.Win.UltraWinTree.v9.1
Assembly Version: 9.1.20091.1000
Win32 Version: 9.1.20091.1000
CodeBase: file:///C:/Program%20Files/VisualCron/Infragistics2.Win.UltraWinTree.v9.1.DLL
Infragistics2.Win.UltraWinTabControl.v9.1
Assembly Version: 9.1.20091.1000
Win32 Version: 9.1.20091.1000
CodeBase: file:///C:/Program%20Files/VisualCron/Infragistics2.Win.UltraWinTabControl.v9.1.DLL
Infragistics2.Win.UltraWinListView.v9.1
Assembly Version: 9.1.20091.1000
Win32 Version: 9.1.20091.1000
CodeBase: file:///C:/Program%20Files/VisualCron/Infragistics2.Win.UltraWinListView.v9.1.DLL
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.I've tried the same query using Saxonica, XMLSpy and a bunch of other parsers, and it evaluates fine.
The problem is, I believe that you're just passing whatever text is in the "XPath expression" textbox to the .NET Framework System.XML. Microsoft's implementation isn't particularly rich and it bombs spectacularly when you just feed it a raw query, which is something to watch for.
Furthermore, even trying to edit the task to supply a file name arising from a trigger, is a real pain, and when that runtime error fires, it results in the task becoming corrupted.
Which led me to
Item 3. Parsing XML using Saxonica within VisualCron
This problem doesn't seem to be really a VisualCron bug, but more a problem with the way that Saxonica works.
If I invoke Saxonica's QUERY.EXE command-line program, which performs xquery on files or streams, I can do it directly from an
Execute Task, and I get results back in the OUTPUT and OUTPUT(STDERR) fields as I would expect.
The problem is that when I create Conditions to analyze the results, the only path that the logic follows is the 'On Match Error' path.
If write a query, and it returns "2" (without the quotes) in the Output Window, and create a single condition in the condition set, with the condition being a VisualCron condition, with the Match being a Task match with Output of "2" (again, without the quotes), I'd expect the Action 'On Match All' or 'On Match Any' to trigger - but they don't.
I even created 4 separate tasks to branch to, for each of the Action matches, so I could explicitly follow the logic path.
All I could think of was is that the Saxonica tools don't condition the exit code when their executables complete (as far as I know, they always issue exit(0), even if the xquery is invalid).
This means that while I can execute the queries, I can't direct the process path.
Followup: after some aditional research.
Problem 1: One thing I didn't note was that that I have VisualCron running on a server, and all code, files etc that are being referenced are on our corporate SAN. The problems I observed happened whether I had set the File Trigger up with polling or not. However, when I moved the whole thing to a development machine, and replicated the environment using //localhost/ instead of the SAN, the problem didn't occur - so the issue is obviously environment-dependent. I'll do more research on this and post any more evidence I see.
Edited by user
2009-09-18T14:25:15Z
|
Reason: Followup information added to end of post