Sure, I can break down what I ended up doing here.
The Sage import CSV file provided for reference had two lines for each invoice, with some columns being data that I had in DocuWare and some of them static data.
I started by creating a file cabinet just for the creation of these flat files with columns to fit the sample file, and with one additional for me to put in a bit of data that will tie the two lines together (get there in a bit).
I created two Autoindex routines. One for each of those two lines. A status triggered by a stamp flags invoices to be processed in. These Autoindex routines create data entries in the file cabinet that are constructed just like the rows in the sample file.
I then created a special result list that correctly orders the invoice rows to match the format on the provided sample and that also hides the extra column that ties the row sets together.
From there we use a search to pull up sets that will make up an import file and use the Export Result List as CSV function to pull down the actual file that's going into Sage.
My explanation probably makes it sound more complicated than it really was, with the biggest lift being the SQL code that constructs the two different rows for each invoice but even that wasn't too bad. Just took a little experimentation to get it right.
Yes, I guess that makes sense to wipe out the system info...
First, thank you for spending some time working through this with me.
That gives me some angles to work down so I'm going to roll up my sleeves and report back after I cover some more ground.
Thank you for taking a look with me here.
Some interesting developments and I've attached my Program.cs and PlatformClient.cs files so that you can see what I have going.
While the condition persists where only things in the entry point call and execute their assemblies, I was able to get a successful 'move item from document tray to file cabinet' action by placing an instance of that code into the entry point itself.
This shows that the code works on a basic level (not surprised since it was already in the project...) and that it would probably work if things outside the entry point were calling their assemblies.
You'll find that I've set the access modifiers to public in my Project.cs file for things after the entry point, but really a blind stab that didn't work so I'll be changing those back to their defaults.
Having the code to move from document tray to file cabinet in the entry point works in an experimental way, but carries real problems. For one it seems to be pretty far out from best practices and maybe even more important is a functional limitation where I have to specify the DocID for it to fire off. In the real world I'd need for this to be dynamic and I didn't have any luck bringing the dynamic search elements in the code up into the entry point to deliver full functionality even if the construction was pretty far out from standard.
I really appreciate you taking a look with me and look forward to getting your opinion on what you see.
OK, update here.
Past that and on to the next thing that has me stumped.
To get rid of the errors after having them come back after a restart helped once I found that setting the project to an older .NET version and then back again did the trick.
Now what I'm looking at is that the elements I'm after in the PlatformClient are not being called up when I run(debug) the project.
I've inserted Console.Write lines in a few places and can see that the GetFIleCabinet element is called up and executes, but no other calls from Program.cs to PlatformClient elements are being triggered.
Probably missing something super simple here...
What do you think?
I was working with the Platform.NETClient sample in Visual Studio, and I was unzipping a new copy every once in a while to give myself a fresh start then out of the blue the package from a fresh unzip loads in with a bunch of errors.
Basically saying that a bunch of things don't exist in the current context.
Cannot figure out how to get back to a stable base package so that I can continue to try to figure out how to make it work.
What do you think?
I've seen this before but cannot remember what I did to correct...
When configuring a new Smart Connect instance, after grabbing the window that I want to put a search button on I get an error saying that Smart Connect cannot connect to the Desktop Apps.
However, everything seems OK with the Desktop App and the DocuWare Desktop Service seems to be running just fine.
Anyone remember the fix?
OK, good to see that my understanding in order.
Would you have any examples that might show where the contents/structure of the output file is built out?
Thanks for that great content, Simon!
It's hard to find much of a variety in working examples for Web Services, and this is wonderful to have.
There's an infrastructure reason for me to not be thinking too much about a web service for this function:
This is a cloud system, with no client hosted server presence at all, and in order to use a Web Service I have to host it somewhere and then make that web service accessible from the greater internet. I'd have to request a server and then make all of the arrangements to have the web service made available to the cloud system, and negotiating that whole thing with a large/complex enterprise IT department is generally a bit of a task on its own.
Am I wrong in my understanding there, that the web service would have to be available from the outside internet?
I do not autocreate the file. The user just manually exports the result list to get the CSV. Pretty manual, not very pretty in a lot of ways, but functional. My handling is not an easy build, and next time I'm likely to check out Patrick's offering before i build another one of these myself.
That's great to know about the rhino docs integration. I know Patrick pretty well.
In this case I built it myself.
The client provided a template CSV file and I built Autoindex routines to populate a dedicated file cabinet where I write the rows for the base invoice and the gl coding detail rows from the table field.
Then i use the sorting order for the result list to arrange and group the rows so that the CSV file that you get when you export the result list conforms to the provided sample.