Converting Touch App resources to Mobile App¶
How "old fndmob" c# annotations map to projections in mobile app:
App Setup¶
Apps 9 / 10¶
AssemblyInfo.cs:
[assembly: AppVersion(Name = "FndmobApp" , Major = 1, Minor = 0, Revision = 0, Component = "FNDMOB")]
[assembly: AppSettings(CustomFieldEnabled = true, UseMessaging = true, UseServerSideErrorHandler = true,
AllowMultipleDevices = false, GPSEnabled = true)]
- Name
- Component
- Major.Minor.Revision
- UseServerSideErrorHandler
- AllowMultipleDevices
- GPSEnabled
UXX¶
.app file:
- Appname
- Component
- Version
- Error handling (Server/Client)
- Multiple Devices (Enabled/Disabled)
- GPS Tracking (Enabled/Disabled)
Entity Resource¶
Apps 9 / 10¶
Entity resource is defined by a c# class and extending DynamicEntityResource class. Entity resources is normally based on a LU view.
[Entity("IsoUnit", "ISO_UNIT", "BasicData",
PackageName = "ISO_UNIT_API",
DefaultWhere = “”,
WriteEnabled = false,
DeliveryMethod = EntityAttribute.DeliveryType.NewBatch,
DefaultSchedule = "DAILY AT 23:00",
TableName = "ISO_UNIT_TAB",
ObjversionFormat = "number"
)]
class ConnectToolsFacilities : DynamicEntityResource
{
}
- DefaultWhere
- PushGuardFunction
- OwnershipQuery
- WriteEnabled
- PreBlock
- PostBlock
- DeliveryMethod
- PushAndBatch
- NewBatch
- ObjversionFormat
- DefaultSchedule
- TransactionGrouping
UXX¶
Entity is defined in the projection by overriding the default entity definition. A corresponding entityset definition is also required for the entity to be accessible in the client.
@Override
entity IsoUnit {
syncpolicy Batch {
syncschedule = monthly on day 3 at 20:30;
}
crud = Create, Read, Update;
exclude attributes = ‘TYPE’; OR use attribute Abc, Xyz
where = "country like ‘A%’";
}
}
- Where
- guardcondition
- ownershipquery
- crud = Create, Read, Update;
- Override CRUD_Xxx___ methods in the svc package - making sure to return a valid etag
- Override CRUD_Xxx___ methods in the svc package - making sure to return a valid etag
- syncpolicy
- Push
- Batch
- Grouped Push - Used to sync entities which have same data set for group of end users
- Client Cache
- Online Only
- Incoming
- Derived from the entity model
- syncschedule = daily at 20:00;
- transactiongroup
Entity Attribute¶
Apps 9 / 10¶
We only added attributes we want to sync down to the device.
Derived Attributes
private String mStdJobDefinition;
[Field("STD_JOB_DEFINITION", SqlExpression = "Standard_Job_API.Get_Definition(std_job_id,contract,STD_JOB_REVISION)")]
public String std_job_definition { get { return mStdJobDefinition; } set { mStdJobDefinition = value; } }
Key/Parent key Attribute
[Field("FUNCTION_ID", Key = true)]
[Field("WO_NO", TableColumnName = "WO_NO", ParentKey = true)]
Temporary Client keys
[Field("MOB_SIGNATURE_LINE_NO", TableColumnName = "MOB_SIGNATURE_LINE_NO", Key = true, TemporaryClientKey = true)]
UXX¶
By default, projection entity will add all LU view attributes to the meta data. So, in UXX, you will need to exclude un wanted attributes.
All attributes are added to the entity. Unless they have been excluded.
exclude attributes = MyAttrib;
It is also possible to explicitly specify the list of attributes to include in the entity
use attributes = MyAttrib;
Attributes with fetch Statement
attribute StdJobDefinition Text {
label = "Std Job";
fetch = "Standard_Job_API.Get_Definition
(std_job_id,contract,STD_JOB_REVISION)";
type = String;
required = [false];
editable = [false];
}
Key/Parent Attribute are now derived from the entity model flags.
Temporary Client keys are now derived from the entity model meta data
PLSQL Block¶
Apps 9 / 10¶
[PlsqlBlock("WorkOrders", "AddJournalEntry", Statement = AddJournalEntry.SQL)]
class AddJournalEntry : DynamicPlsqlBlockResource
{
public const String SQL =
@"DECLARE
wo_no VARCHAR2(35);
user_id VARCHAR2(35);
BEGIN
user_id := :user_id;
wo_no := :wo_no;
&AO.Mobile_Work_Order_Util_API.
Create_Mobile_Download_Journal(wo_no);
END;";
}
- Parameter
- Direction
UXX¶
Action in Projection Model Implement the corresponding pl/sql method in the svc package
- Parameter
not in use
Advanced Query Resource¶
Apps 9 / 10¶
[Entity("EquipmentSpareStructure", "EQUIPMENT_SPARE_STRUCTURE", "Parts",
PackageName = "Equipment_Spare_Structure_API",
WriteEnabled = false,
QueryStatement = MobileEquipSpareStructure.QUERY,
TableName = "EQUIPMENT_SPARE_STRUCTURE_TAB",
ObjversionFormat = "number",
DeliveryMethod = EntityAttribute.DeliveryType.NewBatch)]
class MobileEquipSpareStructure : DynamicEntityResource
{
const String QUERY = @"SELECT……….
FROM <view_name>
WHERE <attr> like ‘A%’
}
UXX¶
Entity in Projection Model (Based on SQL/VIEW)
Entity in the projection with from clause to fetch data from the PL view. So same SQL statement can be added as view in the LU.
entity Flight {
from = "<view_name>";
where = "<attr> like ‘A%’";
attribute Description Text;
attribute Company Text;
}
It is also possible to use query definitions in the projection model
Entity Dependency¶
Apps 9 / 10¶
[EntityDependency(typeof(TstCompany), new String[] { "COMPANY" }, new String[] { "COMPANY" }, false)]
[EntityDependency(typeof(TstCustomer), new String[] { "COMPANY" }, new String[] { "COMPANY" }, true)]
UXX¶
reference CompanyRef(Company) to TstCompany(Company);
array Customers(Company) to TstCustomer(Company);