CalcFields CFrontDotNet

KatselaKatsela Member Posts: 3
Hi all! I am trying to get calculated field (Balance) data from Customers table , but i'm always getting zero.

CFrontDotNet.Instance.ConnectServerAndOpenDatabase("Servername", NetType, "databaseName", 0, false, false, "userName", "password");
CFrontDotNet.Instance.OpenCompany("CompanyName");
int tableNo = CFrontDotNet.Instance.TableNo("Customer");
tableHandle = CFrontDotNet.Instance.OpenTable(tableNo);
int recordHandle = CFrontDotNet.Instance.AllocRecord(tableHandle);

//in this row balance definitely is more than zero
CFrontDotNet.Instance.SetFilter(tableHandle, CFrontDotNet.Instance.FieldNo(tableHandle,"No."), "=C00040");
//getting first row
CFrontDotNet.Instance.FindFirstRecord(tableHandle, recordHandle);
//58 is the balance fieldNo
CFrontDotNet.Instance.CalcFields(tableHandle, recordHandle, new int[]{58});
//this value is always zero
CFrontDotNet.Instance.FieldToString(tableHandle, recordHandle, CFrontDotNet.Instance.FieldNo(tableHandle,"Balance"))

Comments

  • yukonyukon Member Posts: 361
    Hi Katsela,

    Can you refer my sample code. My code wrote with VB.NET.
    Sorry for my long code. I don't know how to upload at here.
    '''Calc Function
    Private Sub GetFromNAV()
    Dim intTableNos As Integer = GetTableNos("Customer") - '''your CFrontDotNet.Instance.TableNo("Customer");
    
    Dim intTableHandler As Integer = GetTableHandler(intTableNos) - '''your CFrontDotNet.Instance.OpenTable(tableNo);
    
    Dim intRecordHandler As Integer = GetRecordHandler(intTableHandler) - '''your CFrontDotNet.Instance.AllocRecord(tableHandle);
    
    Dim strValue As Microsoft.Navision.CFront.NavisionValue
    Dim m_EntryNo As String = "2485592" ''' Customer ID
    Dim decBalance As Decimal = 0
    Dim fldLst() As Integer = {58} ''' Field ID (Balance)
    
    NAVCFront.SetRange(intTableHandler, 1, _
    GetBytes(m_EntryNo, NavisionFieldType.Code), _
    GetBytes(m_EntryNo, NavisionFieldType.Code))
    
    Do While NAVCFront.NextRecord(intTableHandler, intRecordHandler, 1) <> 0
    	NAVCFront.CalcFields(intTableHandler, intRecordHandler, fldLst)
    	strValue = NAVCFront.GetFieldData(intTableHandler, intRecordHandler, 58)
    	decBalance = GetValueAsText(strValue)	
    Loop
    End Sub
    
    Public Function GetBytes(ByVal value As String, ByVal types As CFront.NavisionFieldType) As Byte()
    Erase GetBytes
    Select Case types
    	Case CFront.NavisionFieldType.Text
    		Dim BytesValue As CFront.NavisionText = CFront.NavisionText.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.Option
    		Dim BytesValue As CFront.NavisionOption = New CFront.NavisionOption(CInt(value))
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.BigInteger
    		Dim BytesValue As CFront.NavisionBigInteger = CFront.NavisionBigInteger.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.Binary
    		Dim BytesValue As CFront.NavisionBinary = CFront.NavisionBinary.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.Blob
    		Dim BytesValue As CFront.NavisionBlob = CFront.NavisionBlob.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.Boolean
    		Dim BytesValue As CFront.NavisionBoolean = CFront.NavisionBoolean.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.Code
    		Dim BytesValue As CFront.NavisionCode = CFront.NavisionCode.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.Date
    		Dim BytesValue As CFront.NavisionDate = CFront.NavisionDate.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.DateFormula
    		Dim BytesValue As CFront.NavisionDateFormula = CFront.NavisionDateFormula.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.DateTime
    		Dim BytesValue As CFront.NavisionDateTime = CFront.NavisionDateTime.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.Decimal
    		Dim BytesValue As CFront.NavisionDecimal = CFront.NavisionDecimal.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.Duration
    		Dim BytesValue As CFront.NavisionDuration = CFront.NavisionDuration.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.Guid
    		Dim BytesValue As CFront.NavisionGuid = CFront.NavisionGuid.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.Integer
    		Dim BytesValue As CFront.NavisionInteger = New CFront.NavisionInteger(CInt(value))
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.RecordId
    		Dim BytesValue As CFront.NavisionRecordId = CFront.NavisionRecordId.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.TableFilter
    		Dim BytesValue As CFront.NavisionTableFilter = CFront.NavisionTableFilter.Parse(value)
    		Return BytesValue.GetBytes
    	Case CFront.NavisionFieldType.Time
    		Dim BytesValue As CFront.NavisionTime = CFront.NavisionTime.Parse(value)
    		Return BytesValue.GetBytes
    End Select
    End Function
    	
    Public Function GetValueAsText(ByVal value As CFront.NavisionValue) As String
    GetValueAsText = vbNullString
    Select Case value.FieldType
    	Case CFront.NavisionFieldType.Text
    		Dim BytesValue As CFront.NavisionText = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.Option
    		Dim BytesValue As CFront.NavisionOption = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.BigInteger
    		Dim BytesValue As CFront.NavisionBigInteger = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.Binary
    		Dim BytesValue As CFront.NavisionBinary = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.Blob
    		Dim BytesValue As CFront.NavisionBlob = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.Boolean
    		Dim BytesValue As CFront.NavisionBoolean = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.Code
    		Dim BytesValue As CFront.NavisionCode = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.Date
    		Dim BytesValue As CFront.NavisionDate = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.DateFormula
    		Dim BytesValue As CFront.NavisionDateFormula = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.DateTime
    		Dim BytesValue As CFront.NavisionDateTime = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.Decimal
    		Dim BytesValue As CFront.NavisionDecimal = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.Duration
    		Dim BytesValue As CFront.NavisionDuration = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.Guid
    		Dim BytesValue As CFront.NavisionGuid = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.Integer
    		Dim BytesValue As CFront.NavisionInteger = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.RecordId
    		Dim BytesValue As CFront.NavisionRecordId = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.TableFilter
    		Dim BytesValue As CFront.NavisionTableFilter = value
    		Return BytesValue.ToString
    	Case CFront.NavisionFieldType.Time
    		Dim BytesValue As CFront.NavisionTime = value
    		Return BytesValue.ToString
    End Select
    End Function
    
    I think you forget this part
    GetValueAsText(strValue)

    Best Regards,
    Yukon
    Make Simple & Easy
  • KatselaKatsela Member Posts: 3
    it works thanks!! \:D/
Sign In or Register to comment.