Örnek: MOBIDI Ofis Rapor ve Makro Deyimleri

Aşağıdaki örnekler raporlarda kullanılırken [=...] şeklinde kullanılmalıdır. Element makrolarında ise baştaki ve sondaki bu ifadelere gerek yoktur.



İçerik

İfade

Açıklama

İçerik

İfade

Açıklama

1

Katman Adı

[=context.Data.record.Layer.DisplayName]

Katmanın Adı. Bu isim Mobil cihazda ve MOBIDI ofisde görünen isimdir.

2

Kaydı Yapan Kişi Adı

[=context.Data.record.Device.MobileLicenseFirstName]

Kaydı yapan kişinin MOBIDI ofis'de kayıtlı adı. Bu adı soyadı ile birleştirebilirsiniz.

3

Kaydı Yapan Kişi Soyadı

[=context.Data.record.Device.MobileLicenseLastName]

4

Kullanıcı Departman

[=context.Data.record.Device.MobileLicenseDepartment]

5

Kayıt

[=context.Data.record.DisplayName]

Kaydın listelerde ve sorgu sonuçlarından görünen adı. Bu metin kayda ait özniteliklerden oluşturuluyor. Katmandaki kayıt görünüm makrosu ile belirleyebilirsiniz.

6

Kayıt Tarihi

[=context.Data.record.StartTimeObj]

Kaydın yapıldığı tarih

7

Kayıt Yılı

[=context.Data.record.StartTimeObj.Year]

Raporlamada kolaylık olması için Kayıt tarihinden türetilen Yıl değeri. Ay, Haftanın günü, haftası gibi değerler de benzer şekilde hesaplanırlar.





8

Kayıt Ayı

[=context.Data.record.StartTimeObj.Month]

9

Kayıt Günü

[=context.Data.record.StartTimeObj.Day]

10

Kayıt Haftası

[=Math.Ceiling((double)context.Data.record.StartTimeObj.DayOfYear/7)]

11

Kayıt Yılının Günü

[=context.Data.record.StartTimeObj.DayOfYear]

12

Kayıt Haftanın Günü

[=context.Data.record.StartTimeObj.DayOfWeek.ToString()]

13

Ek Sayısı

[=context.Data.attachments!=null?context.Data.attachments.Count:0]

Kayda ait fotoğraf,ses ve diğer eklerin toplam sayısı.




14

Resim Sayısı 

[=context.Data.ImageList.Count]

15

Video Sayısı

[=context.Data.VideoList.Count]

16

Ses Sayısı

[=context.Data.AudioList.Count]

17

Konum Başlangıç Zamanı

[=context.Data.points.StartTime]

Kullanılan Mobil cihaza bağlı olarak GPS zamanı ile kayıt zamanı arasında küçük farklar olabilir. Bu zaman, GPS noktalarının toplanmaya başlama zamanıdır.

18

Konum Bitiş Zamanı

[=context.Data.points.EndTime]

19

Maks Hız

[=context.Data.points.MaxSpeed]

Kayıt sırasından oluşan maksimum ve minimum hız değeri.

20

Min Hız

[=context.Data.points.MinSpeed]

21

Durma Sayısı

[=context.Data.points.StopCount]

Durma sayısı ve süresi. (Durma süresi için varsayılan değer ...)

22

Durma Süresi

[=context.Data.points.StopDuration]

23

Toplam Süre

[=context.Data.points.TotalDuration]

Kayıt sırasında geçen toplam süre.

24

Başlangıç Noktası

[=context.Data.points.StartPoint!=null?context.Data.points.StartPoint.AsText():""]

Başlangıç ve bitiş koordinat değeri(Coğrafi WGS84)

25

Bitiş Noktası

[=context.Data.points.EndPoint!=null?context.Data.points.EndPoint.AsText():""]

26

Overlay Örnek

[=context.Data.record.GeometryObj!=null?context.Data.QueryFirstValue (context.Data.record.GeometryObj, @"%App%\Repository\DemoData\Countries",”[Name]”):"No Location"]

GeometryObj properties:

https://servis2.dece.com.tr/DeceSystemInfoWebHandler?op=ObjectInfo&Name=GeoAPI.Geometries.IGeometry%2C GeoAPI&PropEx=Geometry

Overlay özelliği ile konum değeri üzerinden başka listeler/tablolar ile ilişki kurulabilir, öznitelikler otomatik olarak taşınabilir.

Burada belirtilen klasörde bulunan kml dosyasındaki geometrilerden yakın olanının adı(yani ülkenin adı) alınacak.

Bu özellik ile parsel numarası, bir parkdaki bölüm numarası, ATM adı gibi değerler de alınabillir.

27

WKT den geometri elde etmek için.

c["geometry"].TryParseGeometry("WKT-Geometry") bir IGeometryObj oluşturur.

 

28

Verilen Polygon için/dışında kontrolü örneği

[=(context.Data.record.GeometryObj!=null || context.Data.record.GeometryObj .CoveredBy(IGeometryObj))?”İçerde”:”Dışarda”

 

 

29

Alan Değeri Örnek

[=context.Data.GetAttribute("5319f849-457a-4012-9a3a-c43b51d0762b")]

Bir alanın değerini raporda kullanmak için...

30

Ek Linki

[=context.Data.GetAttahmentLink(0,1,"=HYPERLINK(\"{0}\",\"Fotoğraf-1\")") ]

Bir kaydın eklerini link olarak getirir.

31

Konum Linki

''=IF(OR(ISBLANK(S%row%),ISBLANK(T%row%)),"",HYPERLINK(CONCATENATE("https://www.google.com/maps?q=",SUBSTITUTE(S%row%,",","."),",",SUBSTITUTE(T%row%,",",".")),"Google Maps"))

Bir Kaydın Konumunu link olarak getirir. Burada konumun enlem ve boylamının var olduğu hücrelerin belirtilmesi gerekmektedir. (Google maps ile açar)

32

Konum Koordinatları Y (Enlem)

[=context.Data.record.GeometryObj!=null?context.Data.record.GeometryObj.Centroid.Y.ToString("#0.0000###"):""]



Konumun enlemini getirir.

33

Konum Koordinatları X (Boylam)

[=context.Data.record.GeometryObj!=null?context.Data.record.GeometryObj.Centroid.X.ToString("#0.0000###"):""]



Konumun boylamını getirir

34

Parent ID

[=context.Data.record.parent_record_id]

Kaydın Bağlı olduğu "ANA" Katmanının ıd sini getirir.

35

Kayıt ID

[=context.Data.record.id]

Bir kaydın id'sini raporda kullanmak için yazılır.

36

Kayıt Geometrisi için Uzunluk ve Alan Hesaplama

context.Data.record.GeometryObj == null ? 0 : c["geometry"].ChangeProjection(context.Data.record.GeometryObj, 4326, 3857).Area

Kaydın içerdiği geometrinin alanını m2 olarak verir.

37

Sorgu yaparak, yakında başka bir kayıttan bilgi getirme

context.Data.QueryFirstEntry

Örnek 1 : Aşağıdaki örnek, MobidiLayer_8a254af5-c1ad-438b-846d-facd561134ec id'li katmanda bu kayda 100 metreden daha yakın kayıt varsa, e07123f7-af3f-49aa-847d-90c7e46fefeb id'li eleemntin değerini bu elemente kopyalar. 100 metre yakınlığında bir kayıt yoksa boşluk yazar.

[=context.Data.QueryFirstEntry(context.Data.record.GeometryObj,100,"{'layers':{'MobidiLayer_8a254af5-c1ad-438b-846d-facd561134ec':''}}") == null ? "" : context.Data.QueryFirstEntry(context.Data.record.GeometryObj,100,"{'layers':{'MobidiLayer_8a254af5-c1ad-438b-846d-facd561134ec':''}}").GetAttribute("e07123f7-af3f-49aa-847d-90c7e46fefeb")]


Örnek 2 : Aşağıdaki örnek, belirtilen ConnectionString ile bağlanılan veritabanındaki bir tabloda geometrik sorgu yapıp en yakın kaydın belirtilen colonundaki değeri yazar.

[=context.Data.QueryFirstRowDataObj(entry.record.GeometryObj, ConnectionString, tableName)[columnName]]

38

Sorgu yaparak başka veri kaynağından bilgi getirme

c["db"].ExecuteScalar

Örnek 1 : Aşağıdaki örnek, aynı formdaki 6f0b6597-9789-41ea-baa9-0a280636edda ID'li alanın değerini belirtilen Excel dosyasının Name sütununda arayıp Value sütunundaki değeri bu alana yazar.

c["db"].ExecuteScalar(c["db"].FromFile("C:\\temp\\test.xlsx"),"SELECT Value FROM [Sheet1$] WHERE Name='" + context.Data.GetAttribute("6f0b6597-9789-41ea-baa9-0a280636edda") + "'",new object[0])



c["db"].FromFile("C:\\temp\\test.xlsx") ifadesi yerine veritabanı bağlantı ifadesini yazarak MS SQL Server, Oracle gibi veritabanlarında aynı işlemi gerçekleştirebilirsiniz. Aşağıdaki sayfada bu konuda örnekler bulabilirsiniz. 

https://www.dofactory.com/reference/connection-strings

Ayrıca, GEODI ya da MOBIDI arayüzlerinden veritabanı bağlantısı yapıp bağlantı bilgilerini bir dosyaya kaydedebilir, bu bölüme dosya adını yazabilirsiniz. Örnek : 

c["db"].ExecuteScalar(@"C:\test\baglanti.xDeceConnection",...



39

Sözlükteki kayıttan bilgi getirme

d.GetAttributeDictionaryItem(“attrubuteid“).GroupName

d.GetAttributeDictionaryItem("9bc82acc-46dd-4f2d-bdc6-f3296bb043d3").ObjectID !=0 ? d.GetAttributeDictionaryItem("9bc82acc-46dd-4f2d-bdc6-f3296bb043d3").DynamicColumnValues["ATM_IL"].ToString() : ““

Soldaki örnek kayıttaki attributeid'si verilen elementin değerini ilgili sözlükte bulup sözlük kaydının grup adını yazar 

40

Her yeni kayıtta otomatik id üretme

c["mobidi"].CreateID(d,"<element_id>","Start_")

c["mobidi"].CreateID(d,"<element_id>",null,2)

c["mobidi"].CreateID(d,"<element_id>",string.Concat(this.record.StartTimeObj.Year,"_") )

c["mobidi"].CreateID(d,"<element_id>",string.Concat(d.GetAttribute("element_id1"),"/",d.GetAttribute("element_id2"),"___")

Her yeni kayıtta bu makronun kullanıldığı alana  Start_000001, Start_000002 … gibi değerler atar.

01,02 , 03 … 101, … gibi değerler atar.

kaydın yılından yararlanarak 2020_000001, 2020_000002, …. gibi değerler atar.

Farklı iki elementin ID lerini birleştirir. Araya "/" koyar. Çıktı: IMG/JPEG__000001

41

Alt katmandaki kayıtlardan değer üretme

d.QueryGroupByValue("{parentRecordID:'"+d.record.id+"'}","SUM:<alanid>",0)

SUM yerine MAX, MIN, AVG ifadeleri gelebilir.

alanid yerine aşağıdaki değerler de kullanılabilir.

  • recordDate

  • layerName

  • dayOfYear

  • weekOfYear

  • month

  • year

  • mobileUser

  • mobideUser_Last

alanid’ye ek olarak aşağıdaki ifadeler de kullanılabilir

  • alanid.dayOfYear

  • alanid.month

  • alanid.year

42

Bir tarihten veya bugünden N gün sonraki iş günü

"((DateTime)d.GetAttribute("<field>")).AddWorkDays(int N)"

d.record.StartTimeObj).AddWorkDays(int N)

Bir tarihe istediğiniz iş gününü ekler. teslimat zamanı, CRM için görüşme zamanı, ödünç verme zamanı gibi hesapları yapabilirsiniz.

43

Aktivite Süresi

Math.Truncate(10*((context.Data.record.EndTimeObj - context.Data.record.StartTimeObj).TotalSeconds)/60)/10

Kayıt başlama ve sonlandırma zamanlarını raporlar. Bu şekilde hangi iş ne kadar sürmüş görebilirsiniz. Math.Truncate, bir sayının integral bölümünü hesaplar. Virgülden sonraki ilk basamağı yazmak için çıkarma işlemini 10 ile çarpıp Math.Truncate kullandıktan sonra tekrar 10’a böldük.

44

Bölme işlemi

context.Data.GetAttribute("31517253-e037-ed13-a093-d217ee001697")==0?0:(context.Data.GetAttribute("13e1a86a-e4d6-472b-67dd-9549890546d2")/context.Data.GetAttribute("31517253-e037-ed13-a093-d217ee001697"))

Bölüm işlemi olan yerlerde bölenin sıfır olup olmadığı kontrol edilmeli. Aksi durumda makronuz kabul edilmeyecektir.