Custom Bean Sugarcrm - javabeans

Apologize for my English. With sugarCRM when I create my own module by using module builder
, the module type that I found are Basic, Company, File, Issue, Person and Sale.
If I want to create another module like "The Patient" that has more properties than Person type (eg., Patient ID, Blood Pressure, Precaution status, Chronic disease and some drug allergy information) How can I create it from scratch.?

Most of the listed module types (all except Basic) can be considered templates, and the advantage of using them is that they come ready-made with common relevant fields. It does sound as though your "Patient" module will benefit from starting with the Person template. From there, you can add as many extra fields as you want.
An example of when you would want to choose Basic, on the other hand, is when you want to start with the bare minimum (as determined by the SugarCRM architecture), and you don't want to have to deal with a lot of extraneous default fields that won't ever be used, and can't be deleted. The custom modules I have built often have nothing to do with conventional CRM needs, and therefore none of the other templates have any relevant fields.
In your case, I would go ahead and start with the Person template. Take a look at the default fields that Module Builder gives you to start with. If there are more than a few that you wouldn't use (and would always be cluttering up the Patient module), then consider starting with the Basic template instead.

Related

Populate REDCap dropdown with data from outside source

I think this question may be somewhat similar to this one : REDCap automatically populate fields from earlier records
That said, in that question they were populating the dropdown with data from elsewhere in REDCap, my question pertains to outside of REDCap.
What exactly I'm trying to do:
At our institution we store a bunch of information in a clinical trial management software called "OnCore". That's not SUPER important for this question, besides the fact that we connect to it for various reasons through a couple different possible channels (sql, api, Snowflake, etc..).
At the same time, we're building a REDCap project where staff can keep track of deviations that happen in trials and what was done about it. The problem is, staff currently have to manually type into REDCap the protocol they are working on.
Let's say in OnCore a protocol is called LS-P-Joe. Well, in REDCap, someone might type "LS-p-jOe" or "Joe" or "LSPJOE" etc.. etc.. and it'll cause a problem when I go to merge the data later.
I'd love to have a dropdown where staff can only select one spelling of the word, unfortunately there are dozens if not a few hundred studies to choose from (I don't want to build them all into the REDCap project manually).
Which brings me to: is there a way to have a dropdown in REDCap that dynamically connects to an outside data source? Let's say through SQL query?
Create a new REDCap project that contains only the legal protocol. No patient data points are needed.
Use a simplified version of #Jangari's solution (that you referenced above). But your scenario doesn't require the UNION clause. I think you'll need a REDCap admin to implement the Dynamic SQL Field.
Automate some script to periodically update the list of legal protocol names. Presumably you query OnCore (maybe with an Oracle driver) and update REDCap (see this list of packages that use REDCap's API).
I suggest involving your site's REDCap admin as soon as possible. They can also ask questions in the API space on the REDCap Community Site.

Naming convention for variables like timers, counters, indices, etc?

I have a project in which I am organizing my variables/tags using categories like "PartA", "PartB", "Data", "HMI", and of course the requisite "Debug".
So a few examples of random tags would be:
Debug.ReadWriteTimer
HMI.ReportViewerMode
Data.IndexResult
Data.ActiveDirectory
PartA.InspectionResult
But I have several variables that I am using across the program as logistical devices, such as counters, indices, and (non-debug) timers, that don't really fit in the the few categories that I listed above.
I've considered the following but none of those seem to fit either:
Global.tagname
Program.tagname
Devices.tagname
What is a clear and logical naming convention for program-level "tools" like these that would be instantly recognized by someone looking over the tag database for the first time?
(Context for the curious: this particular project is created using a machine vision software called Cognex Designer, which utilizes the C# language in an interface that is the illegitimate child of RSLogix and LabVIEW.)
misc, shortcut of miscellaneous, is/was often used to categorize items that couldn't be put in other categories.
This is if you must use a category, otherwise the lack of category perfectly describes the miscellaneous property of a variable.
I've decided to use "App", short for Application, as the category for these items. I believe it's clearer than "Program" and not easily confused with scope, like "Global", and the abbreviation will help alleviate confusion with .NET's Application object.

Showing table hierarchy through table names

I am working on redesigning a database for a product called Project Billing. I am having trouble coming up with table names. In the old database, the names were super obscure (PRB_PROJ_LVL), so old is of no help. The database is small - 10 tables or so - but will grow over time.
Here's the problem - Projects are an entity (and table), but the word is also used as an adjetive. Example
Project - a table containing projects.
ProjectTask - a table containing project tasks; this is a child of Projects.
ProjectTemplate - a table for project templates, which is not a child of Projects. Project templates just serve as a model for creating a bunch of ProjectTasks.
So, how do I show that ProjectTask is a child of Project but ProjectTemplate isn't? Thanks as always.
Internal documentation of your schema and its intended use is one of the better ways to do this. Relying on naming convention alone will always leave open the possibility for interpretation - explicit definitions don't do that. That said, we have defined some objects which are intended for use as models (templates in your case). These model objects are not to be used or directly manipulated by the production application and over time are mutable with new objects being based on modified models. One way we tried to apply self-descriptiveness was the introduction of schema. Since we had different departments that could make use of the same model objects, we had something along the lines of (adjusted to apply to your question without assuming too much):
[dept_X].[projects]
[dept_X].[project_tasks]
And for templates, which are never directly used by the application or users (per say):
[model].[projects]
[model].[project_tasks]
As a programming reference for our developers, schema definition scripts contain documentation describing object relationships (as do the objects internally do via foreign keys, etc). As an added measure, a wiki article is generated for all new objects sorted by project. Objects existing prior to this new system (my onboarding) get documented as they get modified or as time permits which ever comes first.

Is there a standard for customer data?

It seems like every time a new project gets started, a bunch of customer-related code gets copied and pasted. First name, last name, gender, email, etc.
Is there a current standard for customer contact / id data? It seems to me that it would be MUCH easier to have a defined standard for working with this information rather than getting stuck on whether or not to use "first_name" or "firstName" when creating this structure.
What I'm looking for is a universal format for a customer object.
Anyone seen anything like this?
In java every variable name and also member variable names should be set in lower camel case.
http://en.wikipedia.org/wiki/CamelCase
Here are the naming conventions from oracle:
http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367
This is some kind of "standard" for such things.
A bit old, but have you looked at the Party Model as a standard way of dealing with things like customers?
Take a look at the data model diagrams from the Apache Open for Business Project - you'll find plenty of useful information on how to construct the customer object by looking at how they deal with the Party object first:
https://cwiki.apache.org/confluence/display/OFBTECH/Data+Model+Diagrams

Entity, Value Object or what is it and where it should be?

I have class called 'Tool'. Tool has properties like: Name, Description and some specific others. Tool is special because Name and others are read only but description can be modified by users.
Count of tools is constant and known at development time. It is not Value Object because I need to query them and show to users where they can update Description. So, it's kind of Entity but users can not create new Tools.
I'm looking for possibility to take Tool like this:
Tool.SomeGreatTool
where SomeGreatTool is Tool with name "Some great tool" and description should be the same like this specified by user.
Jimmy Bogard has solution almost perfect but NHibernate know anything about SomeGreatTool and Description will be null.
How to modify Jimmy's solution or how to do it different way? How to instantiate SomeGreatTool from database?
We still treat these kinds of semi-constant data as a sort of well-known entities. We create value objects/enumeration classes for the tool types, but separate tool types from tools. You still need to go to the persistent store to do something like ToolRepository.Find(ToolType.Screwdriver). Even though there will be only one tool per tool type, you'd still separate these two concepts.