Xtext custom cross-references - xtext

I've been working on an Xtext-based Eclipse plugin for a language we use in-house. This language might have a statement of the form:
run : /some/file/path/foo.txt
... and ultimately I want to provide a custom Location provider so that pressing F3 on the filepath will open up the file in a new editor in Eclipse. I haven't had a chance yet to try this out, but does anyone see anything wrong with the following approach?
Override IHyperlinkHelper to make my filepath rule cross-referencable
Override ILocationInFileProvider to make the filepath rule do the Eclipse magic to open the file in a new editor
Any advice is appreciated, thanks

The approach sounds good to me. You could provide content assist for paths as well by customizing the proposal provider. A validation rule for the file reference may be helpful, too.

Related

NopCommerce Plugin Localization

I am working on a NopCommerce website and have quite a bit of site-wide customization so I have created a plugin to handle it all but not sure on how to handle the localization. I see there are a couple of ways of updating the Localization strings, one way I have found is in the Plugin's Install() method:
this.AddOrUpdatePluginLocaleResource("Plugins.Payments.PayPalStandard.Fields.AdditionalFee", "Additional fee");
This looks like it only adds new resource strings for the plugin, is there a similar way to update the other resources via the Install() method like:
Admin.Catalog.Products.List.DownloadPDF
I found that there is a way to export the entire language to a language_pack.xml file, would it be better to just create an entire language pack instead? Is there a way to add a new language pack from the plugins Install() method?
I guess I could simply open the language_pack.xml file and add each resource found using the AddOrUpdatePluginLocaleResource, I was hoping that there was a built-in way of doing this using NopCommernce functionality.
Thanks!
As #Raphael suggested in a comment, provide a language pack along with plugin file to the end users, and give an option to upload required resource file within your plugin configuration page.
As per as I know, there is no inbuilt way to add language pack on plugin installation, but you can do some code on plugin install method to find language pack file(s) from plugin folder and install it, not quite sure, you can take reference of inbuilt methods.

CRM 2011, ILMerge and localization

I'm having some trouble merging the localization satellite assemblies into the plugin DLL for CRM2011.
Either that, or I don't know how to use the merged resources afterwards.
I create a few plugins and create a basic resource file (default - English) and one for a specific culture (at the time of writing it's for Polish localizations, but later I'll need to add French as well).
I make sure not to sign the assembly itself, as ILMerge will sign the finished assembly itself.
This is the command I use to merge the extra satellite assembly:
ilmerge /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /log:log.txt /keyfile:KeyFile.snk /out:Plugins.dll DynamicsCRM2011.Plugins.dll pl-PL\DynamicsCRM2011.Plugins.resources.dll
As you can see, the plugins are in .NET 4.0 and I've got the required .config file for ILMerge to use the required assemblies for merging.
The generated file appears fine, I can register it with CRM plugin-registrator, add new steps and so forth.
However, it will always use the default language. I've tried changing the System.Threading.Thread.CurrentThread.UICulture, but this didn't help. When I created a ResourceManager class and used GetString("ErrorMessage", new System.Globalization.CultureInfo("pl-PL")), I got an Exception that the specified ResourceManager doesn't know what to do with the specified culture.
I know of this question here. However, the posted solution seems to be an old one. The generated resource .cs files do not use a ComponentResourceManager. Also, parts of the code posted there have been marked as deprecated.
I'm not really sure what I'm am to do now, or how to further debug this, as I have very little experience when it comes to working with assemblies themselves. Please, help me get those satellite assemblies under control.
Update:
I've been working with sandbox plugins for a while now, and thus I no longer have access to things such as CurrentCulture (or at least I cannot change such things). I've tried tackling this problem once more: I've created a simple plugin which is fired when a new Account is saved. Nothing fancy. Here's the actual plugin code:
ResourceManager rm = new ResourceManager(typeof(Properties.Resources));
var s = rm.GetString("ErrorAlreadyPosted", new System.Globalization.CultureInfo("pl-PL"));
throw new InvalidPluginExecutionException(s);
The code no longer throws an exception about not being able to find the specified culture... also the code obviously throws an exception at the end, but the important thing is WHAT the exception message is. I'd expect it to be in Polish.
Alas, it is not. The string returned by GetString is still in English.
The command I used for ILmerge is the same as before, but with the /lib parameter specified so that I don't have to copy all the CRM SDK dlls...
Apparently it is not possible to read resources from with the context of a Plugin.
Read up on MSDN: http://msdn.microsoft.com/en-us/library/hh670609.aspx#BKMK_UseXMLWebResourcesAsLanguageResources
Quote: When a plug-in requires localized text, you can use an XML web resource to store the localized strings so the plug-in can access them when needed. The structure of the XML is your option, but you may want to follow the structure used by ASP.NET Resource (.resx) files to create separate XML web resources for each language. For example, the following is an XML web resource named localizedString.en_US that follows the pattern used by .resx files.
This is all I know so far - have yet to build my own solution for localization of a crm plugin.
If you use a reflector tool to look at the generated assembly, do you see your resource(s) embedded correctly? You may be experiencing the bug as outlined in the link you posted.
Try setting Thread.CurrentThread.CurrentUICulture and\or Thread.CurrentThread.CurrentCulture.
Also try hooking into the AppDomain.CurrentDomain.AssemblyLoad and\or AppDomain.CurrentDomain.AssemblyResolve to debug which assemblies are being attempted to load and from where. You might need to customize their behavior so that instead of loading an external assembly to load an internal resource instead.
You can try embedding project references as resources instead of using ilmerge as well.
See this: http://bartlomiej.net/dotnet/embeded-assembies-into-an-executable/
The way we eventually handled this is by adding the localization XML files (generated by Visual Studio) as CRM resources, and created a bit of custom code which seeks the appropriate resource and then seeks the localization text inside.
It's, obviously, not as simple as just using the generated C# localization class, and requires some prep work. However, with that prep-work in place and with using nameof it's now almost as simple as the aforementioned resource classes.

F# interactive session persistance and other such user questions

Is there any way of persisting my F# session or serializing it into a file? i.e. so I can hand it to a friend and say "run this" and they will be at the same place I was? I know forth had this ability but I can't find any way of doing this.
An alternative would be a log file or something of similar ilk, but ideally it would strip the output and just give me the code I wrote.
On the topic of user questions, is there a config file for F# so I can add some "always includes" or alter the defaults?
There is no way to serialize the F# Interactive session or create some log of commands automatically.
The typical user interaction is that you write all your code in F# Script File (.fsx extension) and evaluate code by selecting lines and sending them to F# Interactive using Alt+Enter. If you work like this, then the F# Script File is a bit like log of your work - and you can easily send it to other people.
The good thing about this approach is that you can edit the file - if you write something wrong, you can correct it and the wrong version will not appear in the log. The bad thing is that you need some additional effort to keep the source file correct.
Regarding automatic inclusions - you can specify options for fsi.exe in Visual Studio Options (F# Tools). The --load command line parameter can be used to load some F# source at startup.

How to Override Sproutcore's Namespace Captialisation

I'm working on a Sproutcore UI for a project called "BWUnit". When using sc-gen to create models, etc it converts "BWUnit" to "BwUnit" in the generated files. Is there a way to prevent this from happening so I don't have to manually edit the files, replacing "BwUnit" with "BWUnit"?
so SproutCore unfortunately doesn't support what you want out of the box. This is their naming convention: http://wiki.sproutcore.com/w/page/27759680/FiedNotes-Suggestions%20on%20running%20the%20Sproutcore%20framework%20on%20a%20Windows%20(7)%20computer%20using%20a%20specific
If you are brave, however, you can edit the built tools and change the behavior of how the project and app names are prepared:
https://github.com/sproutcore/abbot/blob/master/lib/sproutcore/models/generator.rb#L462
If this is a feature you want and need, please open an issue here:
https://github.com/sproutcore/sproutcore/issues
Cheers,
Johannes

What's the best way to create a report on OpenERP

I try to create a report on OpenERP. There is several methods to do this task (openoffice plugin, XML files, RML files, etc.)
What's the quickest way to do that (and/or the most beautiful) ?
I've only used the RML files and I've been happy with the result. I haven't tried the OpenOffice method, but it seems like the conversion step from SXW to RML would be more hassle. When I edit an RML file, I just save it and click on the report button in the client to try it out. No compilation or conversion necessary. OpenOffice might be useful if I wanted to let business users make minor changes to reports, but I suspect that all the weird data extraction code would confuse them.
I haven't tried the XML report technique, so I can't comment on it.
I assume you've seen the documentation on writing reports. I just noticed a section that talks about changing the corporate default headers, and it only seems to be described for XML reports. I haven't looked any further, but that might be a reason to use XML instead of RML. I know we would like to get rid of the corporate headers for some internal documents.
Web kit Report is the easiest way to make a Report, to install webkit report
sudo apt-get install wkhtmltopdf
and install report_webkit module in OpenERP, it will show the tab in the company, within company you can make simple report using OpenERP GUI,
for Advance report You must learn the maco template,
Thanks..!!
If you know html then webkit report using mako. Webkit reports are very easy to create compare to rml.
For simple reports I prefer using rml reports, by creating an sxw file first and then convert it to rml using the script in the openerp module base_report_designer.
For complex report and also for making the report more beautiful, I prefer to use jasper_reports module. With the help of iReport we can generate beautiful reports. We can also use jdbc datasource which can be connect to our database and pull the data. Subreport is also possible using jasper_reports
There are also other reporting tools like aeroo reports,using xsl file, openoffice plugin etc.
jasper report can be used to create OpenERP report using sql query.
Here is a way I have shown in my post which describes creating a report based on SQL query in OpenERP 7. Please follow this link for the details. Hope this will help others.
http://sajjadhossain.com/2013/06/30/openerp-7-creating-report-using-sql-query/
the most easiest and simple and quickest way to edit,customize and create your own report is editing the .rml files knowledge from experience so far

Resources