Practical notes on Enterprise software systems and the economics of software.
...by Daniel Szego
![]() | |
"On a long enough timeline we will all become Satoshi Nakamoto.."
|
|
Daniel Szego
|
Showing posts with label MatchPoint. Show all posts
Showing posts with label MatchPoint. Show all posts
Thursday, April 7, 2016
Sunday, January 10, 2016
Comparing MatchPoint with SharePoint Custom Development based on Agile Technology Curve
If we want to compare a classical SharePoint development with a MatchPoint development, the easiest way is to consider the following diagram on comparing a classical development life-cycle based on the complexity of specification and the cost of development.
Figure 1. Comparing MatchPoint with classical SharePoint Development.
From a technological perspective each project has got at least three stages:
1. Setting up the environment (until Q1)
2. Working within the technological limits (between Q1 and Q2)
3. Reaching the technological limit.
Comparing MatchPoint with SharePoint custom development based on a agile characteristic curve we can conclude the following things.
Phase till Q1: Setting up time and cost is higher at MatchPoint as with SharePoint custom development, as MatchPoint has to be licensed and installed on the top of SharePoint.
Phase between Q1 and Q2: Agile Phase at MatchPoint is much bigger as with SharePoint. A lot of taks can be carried out simply by carrying out XML configuration tasks avoiding the pretty much resource intensive tasks, like JavaScript or C# developments. Typical scenarios that are supported by MatchPoint are for example: search based applications, tagging and ontology based applications, forms, workflows and simple case based applications.
After Q1; After reaching the technological limit development both for SharePoint and for MatchPoint will be much more difficult and much slower. MatchPoint extends in some sense the technological limit of SharePoint, as an example extended tagging mechanism is feature that is not very much possible to realize with SharePoint. In this sense MatchPoint not only provides an easy configuration possibility to speed up agile phase of the development but it extends the architecture limit as well.
Sunday, November 1, 2015
Integrating MatchPoint with SAP (a step by step initial approach)
Integrating MatchPoint with SAP is pretty easy as a first approach. You have to do two things:
- get an SAP connector to read out some information from SAP
- implement a data provider in MatchPoint with the SAP adapter to use the imported data.
So let we have the steps in details:
STEP 1. Let we assume that we want to see the controlling area names from SAP controlling:
Figure 1. List of controlling areas in SAP.
STEP 2. Let we create some integration with SAP, there are many ways of doing that ranging from BAPI calls to web service integration through Netweaver. I m choosing the most simple SAP .NET connector.
STEP 3. Let we create a Visual Studio project console application and reference the SAP.NET connecor dlls: sapnco.dll and sapnco_utils.dll. I am probably using a little bit old version, because for me it was working only with .NET framework 4.0 and not with 4.5 or higher.
STEP 4. Let we create a basic connection class named SAPSystemConnectMP to store the SAP connection information, like port, system number, access information...:
public class SAPSystemConnectMP : IDestinationConfiguration { bool IDestinationConfiguration.ChangeEventsSupported() { return true; } public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged; RfcConfigParameters IDestinationConfiguration.GetParameters(string destinationName) { if ("K47".Equals(destinationName)) { RfcConfigParameters parms = new RfcConfigParameters(); parms.Add(RfcConfigParameters.AppServerHost, "192.168.137.238"); parms.Add(RfcConfigParameters.SystemNumber, "00"); parms.Add(RfcConfigParameters.User, "root"); parms.Add(RfcConfigParameters.Password, "***"); parms.Add(RfcConfigParameters.Client, "800"); parms.Add(RfcConfigParameters.Language, "DE"); parms.Add(RfcConfigParameters.PoolSize, "50"); parms.Add(RfcConfigParameters.MaxPoolSize, "100"); parms.Add(RfcConfigParameters.IdleTimeout, "6000"); return parms; } return null; } }
STEP 5. Let we create a wrapper class for the ControllingArea, with the static setup procedure that calls the BAPI_CONTROLLINGAREA_GETLIST Bapi and from the result takes the CONTROLLINGAREA_LIST table and lists all controlling area name and code.
public class ControllingArea { public string ControllingAreaCode; public string ControllingAreaName; public static List<ControllingArea> getAllControllingAreas(RfcDestination destination) { List<ControllingArea> ret = new List<ControllingArea>(); RfcRepository repo = destination.Repository; IRfcFunction controllingAreaList = repo.CreateFunction("BAPI_CONTROLLINGAREA_GETLIST"); controllingAreaList.Invoke(destination); IRfcTable controllingAreas = controllingAreaList.GetTable("CONTROLLINGAREA_LIST"); for (int cuIndex = 0; cuIndex < controllingAreas.RowCount; cuIndex++) { controllingAreas.CurrentIndex = cuIndex; ControllingArea area = new ControllingArea(); area.ControllingAreaCode = controllingAreas.GetString("CO_AREA"); area.ControllingAreaName = controllingAreas.GetString("Name"); ret.Add(area); } return ret; } }
STEP 6. Let we implement a MatchPoint Data Provider, of course after referencing the MathcPoint dlls, possibly from the development kit : Colygon.MatchPoint, Colygon.MatchPoint.Server and Colygon.MatchPoint.Snow.
[Serializable] public class SAPDataProvider : BaseDataProvider { public string[] List; public override BaseDataProviderInstance CreateInstance(string cacheKey, IEnumerable<string> columnNames) { return new SAPDataProviderInstance(cacheKey, this, columnNames); } }
STEP 7. Last but not least let we implement a data provider instance. Perhaps the most important part of the instance is the GetInternalData function. It opens an SAP connection through the configured connection class, queries all the controlling areas and transforms the names to a simple string list.
public class SAPDataProviderInstance : BaseDataProviderInstance { private readonly SAPDataProvider provider; public SAPDataProviderInstance(string cacheKey, SAPDataProvider provider, IEnumerable<string> columnNames) : base(cacheKey, columnNames) { this.provider = provider; } protected override CachePolicy CachePolicy { get { return new CachePolicy(CacheGranularity.NoCache, 0); } } protected override IEnumerable<object> GetInternalData() { SAPSystemConnectMP sapCfg = new SAPSystemConnectMP(); try { RfcDestinationManager.RegisterDestinationConfiguration(sapCfg); } catch(Exception ex){} RfcDestination rfcDest = RfcDestinationManager.GetDestination("K47"); List<ControllingArea> cAreas = ControllingArea.getAllControllingAreas(rfcDest); List<string> res = new List<string>(); foreach (ControllingArea area in cAreas) { res.Add(area.ControllingAreaName); } provider.List = res.ToArray<string>(); return provider.List; } public override string GetCacheToken() { return null; } }
STEP 8. Having compiled,we have to registrate everything in GAC (the SAP connector DLLs as well) and we have to registrate the DataProvider in the matchpoint configuration as an external assembly and of course IISreset at the end.
Figure 2. MatchPoint Configuration.
STEP 9. If everything went well, you have to see the new dataprovider in your system. So as an test we can create a composite WebPart setting the SAPDataProvier and showing with a pattern transformer the DataItem.
Figure 3. Composite WebPart configuration.
Figure 4. Controlling area information in MatchPoint from SAP.
Subscribe to:
Posts (Atom)