kolmapäev, 19. oktoober 2016
Raporti andmeallika akna taastamine
Ctrl+Alt+D klahvikombinatsioon toob raporti Report Data andmeallikate akna tagasi, kui see peaks kadunud olema
teisipäev, 29. märts 2016
Eesti isikukoodi kontrollsumma arvutamise funktsioon Transact-SQL
-- =============================================
-- Author: Kuido Külm
-- Description: Arvutab Eesti isikukoodi kontrollsumma
-- =============================================
CREATE FUNCTION [dbo].[EST_PERSON_IDCODE_CHECKSUM_S](@isikukood NVARCHAR(11))
RETURNS NVARCHAR(1)
AS
BEGIN
DECLARE @checksum INT = -1, @sum INT=0, @weight INT=1, @i INT=1,@k INT
WHILE @i <= 10
BEGIN
SET @k=CAST(SUBSTRING(@isikukood,@i,1) AS INT)*@weight
SET @sum=@sum+@k
IF @weight = 9
SET @weight=1
ELSE
SET @weight=@weight+1
SET @i=@i+1
END
SET @checksum=@sum%11
IF @checksum != 10
RETURN CAST(@checksum AS NVARCHAR(1))
SET @sum=0
SET @weight=3
SET @i=1
WHILE @i <= 10
BEGIN
SET @k=CAST(SUBSTRING(@isikukood,@i,1) AS INT)*@weight
SET @sum=@sum+@k
IF @weight = 9
SET @weight=1
ELSE
SET @weight=@weight+1
SET @i=@i+1
END
SET @checksum=@sum%11
IF @checksum != 10
RETURN CAST(@checksum AS NVARCHAR(1))
RETURN '0'
END
-- Author: Kuido Külm
-- Description: Arvutab Eesti isikukoodi kontrollsumma
-- =============================================
CREATE FUNCTION [dbo].[EST_PERSON_IDCODE_CHECKSUM_S](@isikukood NVARCHAR(11))
RETURNS NVARCHAR(1)
AS
BEGIN
DECLARE @checksum INT = -1, @sum INT=0, @weight INT=1, @i INT=1,@k INT
WHILE @i <= 10
BEGIN
SET @k=CAST(SUBSTRING(@isikukood,@i,1) AS INT)*@weight
SET @sum=@sum+@k
IF @weight = 9
SET @weight=1
ELSE
SET @weight=@weight+1
SET @i=@i+1
END
SET @checksum=@sum%11
IF @checksum != 10
RETURN CAST(@checksum AS NVARCHAR(1))
SET @sum=0
SET @weight=3
SET @i=1
WHILE @i <= 10
BEGIN
SET @k=CAST(SUBSTRING(@isikukood,@i,1) AS INT)*@weight
SET @sum=@sum+@k
IF @weight = 9
SET @weight=1
ELSE
SET @weight=@weight+1
SET @i=@i+1
END
SET @checksum=@sum%11
IF @checksum != 10
RETURN CAST(@checksum AS NVARCHAR(1))
RETURN '0'
END
esmaspäev, 20. aprill 2015
ID-kaardi tarkvara alates versionist 3.10.2 ning IIS6 ja IIS7
Sellise asja peale juhtusin, kus peale ID-kaardi baastarakvara uuendamist alates versioonist 3.10.2 ei hakanud enam tööle ID-kaardiga autentimine, ehk
HttpClientCertificate sert = Request.ClientCertificate;
if (!sert.IsPresent)
{
sai lati vastuseks, et sertifikaati pole, ehk PIN1 ei küsitud
Asja saab taas töökorda Windows'i serveri registris asukohas HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL võtme SendTrustedIssuerList väärtusega 0 (tüüp REG_DWORD) lisamisega
HttpClientCertificate sert = Request.ClientCertificate;
if (!sert.IsPresent)
{
sai lati vastuseks, et sertifikaati pole, ehk PIN1 ei küsitud
Asja saab taas töökorda Windows'i serveri registris asukohas HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL võtme SendTrustedIssuerList väärtusega 0 (tüüp REG_DWORD) lisamisega
esmaspäev, 10. veebruar 2014
Nimeruumiga XML faili foreach tsükli läbiketramine ja XPath nimeruumi kasutamine
Mõnikord pannakse XML standardi kohaselt nimeruum dokumendile juurde.
Näiteks ISO20022 kasutamine võib tekitada sellise dokumendi
kus dokumendis on defineeritud ka nimeruum
xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.02"
<?xml version='1.0' encoding='UTF-8'?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.02">
<BkToCstmrAcctRpt>
<GrpHdr>
<MsgId>2014013002396394670001</MsgId>
</GrpHdr>
<Rpt>
<Id>552859428-EUR-1</Id>
</Rpt>
<CreDtTm>2014-01-30T16:00:09</CreDtTm>
<FrToDt>
<FrDtTm>2014-01-30T00:00:00</FrDtTm>
<ToDtTm>2014-01-30T16:00:15</ToDtTm>
</FrToDt>
<Acct>
<Id>
<IBAN>EE112670221023582381</IBAN>
</Id>
<Acct>
<NtryDtls>
<TxDtls>
<Refs>
<AcctSvcrRef>2014012300101119-1</AcctSvcrRef>
<EndToEndId>NOT PROVIDED</EndToEndId>
</Refs>
<AmtDtls>
<InstdAmt>
<Amt Ccy="EUR">132.29</Amt>
</InstdAmt>
<TxAmt>
<Amt Ccy="EUR">132.29</Amt>
</TxAmt>
</AmtDtls>
<RltdPties>
<Dbtr>
<Nm>PAOLO OSCAR GARCIA</Nm>
<PstlAdr>
<Ctry>ES</Ctry>
<AdrLine>CL.SAN ROQUE, 61 12-4 12004 CASTELLON DE LA PLANA, CASTELLON/C</AdrLine>
</PstlAdr>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>ES9862342069989523042901</IBAN>
</Id>
</DbtrAcct>
</RltdPties>
<RltdAgts>
<DbtrAgt>
<FinInstnId>
<BIC>EVOBESMMXXX</BIC>
</FinInstnId>
</DbtrAgt>
</RltdAgts>
<RmtInf>
<Ustrd>1098052330002 PAOLO OSCAR GARCIA</Ustrd>
</RmtInf>
</TxDtls>
</NtryDtls>
</Ntry>
<Ntry>
<NtryRef>2014012300203432-1</NtryRef>
<Amt Ccy="EUR">68.97</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>BOOK</Sts>
<BookgDt>
<Dt>2014-01-23</Dt>
</BookgDt>
<ValDt>
<Dt>2014-01-23</Dt>
</ValDt>
<AcctSvcrRef>2014012300203432-1</AcctSvcrRef>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>RCDT</Cd>
<SubFmlyCd>DMCT</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>MK</Cd>
<Issr>Swedbank AS</Issr>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<AcctSvcrRef>2014012300203432-1</AcctSvcrRef>
<InstrId>11</InstrId>
</Refs>
<AmtDtls>
<TxAmt>
<Amt Ccy="EUR">68.97</Amt>
</TxAmt>
</AmtDtls>
<RltdPties>
<Dbtr>
<Nm>Paul Hark</Nm>
<Id>
<PrvtId>
<Othr>
<Id>3933034216</Id>
</Othr>
</PrvtId>
</Id>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>EE634129278536542306</IBAN>
</Id>
</DbtrAcct>
</RltdPties>
<RltdAgts>
<DbtrAgt>
<FinInstnId>
<BIC>EKRDEE22</BIC>
</FinInstnId>
</DbtrAgt>
</RltdAgts>
<RmtInf>
<Ustrd>Nooruse 17-2 Arve nr. 109316 Paul Hark</Ustrd>
<Strd>
<CdtrRefInf>
<Tp>
<CdOrPrtry>
<Cd>SCOR</Cd>
</CdOrPrtry>
</Tp>
<Ref>1093160210005</Ref>
</CdtrRefInf>
</Strd>
</RmtInf>
</TxDtls>
</NtryDtls>
</Ntry>
</BkToCstmrAcctRpt>
</Document>
Sellise faili lugemina käib nagu ikka
XmlDocument xdoc = new XmlDocument();
xdoc.Load(file);
kuna dokumendil on nimeruum siis tuleb see XmlNamespaceManageri kasutades ära näidata
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
nsmgr.AddNamespace("bk", "urn:iso:std:iso:20022:tech:xsd:camt.052.001.02");
bk on nüüd nimeruumi alias mida XPathis kasutada tuleb.
Paar asja mis tuleb tähele panna
Esiteks nimeruumi kasutamine XPath otsingus, alias tuleb iga pathi ette kirjutada
bk defineerisime AddNamespace meetodiga
XmlNode nod = xdoc.SelectSingleNode("//bk:Rpt//bk:Acct//bk:Id//bk:IBAN", nsmgr);
string pkood = nod.InnerText.Trim();
ehk näite põhjal tuleb vastuseks EE112670221023582381
Teiseks foreach tsüklis tipule viitamine, siin tuleb XPath avaldist alustada punktiga
XmlNodeList rows = xdoc.SelectNodes("//bk:Ntry", nsmgr);
foreach (XmlNode nrow in rows)
{
nod = nrow.SelectSingleNode(".//bk:NtryDtls//bk:TxDtls//bk:RltdPties//bk:Dbtr//bk:Nm", nsmgr);
}
kui punkti algusse ei pane siis tsükkel võtab alati esimese leitud XPathi avaldise tulemuse
Näiteks ISO20022 kasutamine võib tekitada sellise dokumendi
kus dokumendis on defineeritud ka nimeruum
xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.02"
<?xml version='1.0' encoding='UTF-8'?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.02">
<BkToCstmrAcctRpt>
<GrpHdr>
<MsgId>2014013002396394670001</MsgId>
</GrpHdr>
<Rpt>
<Id>552859428-EUR-1</Id>
</Rpt>
<CreDtTm>2014-01-30T16:00:09</CreDtTm>
<FrToDt>
<FrDtTm>2014-01-30T00:00:00</FrDtTm>
<ToDtTm>2014-01-30T16:00:15</ToDtTm>
</FrToDt>
<Acct>
<Id>
<IBAN>EE112670221023582381</IBAN>
</Id>
<Acct>
<NtryDtls>
<TxDtls>
<Refs>
<AcctSvcrRef>2014012300101119-1</AcctSvcrRef>
<EndToEndId>NOT PROVIDED</EndToEndId>
</Refs>
<AmtDtls>
<InstdAmt>
<Amt Ccy="EUR">132.29</Amt>
</InstdAmt>
<TxAmt>
<Amt Ccy="EUR">132.29</Amt>
</TxAmt>
</AmtDtls>
<RltdPties>
<Dbtr>
<Nm>PAOLO OSCAR GARCIA</Nm>
<PstlAdr>
<Ctry>ES</Ctry>
<AdrLine>CL.SAN ROQUE, 61 12-4 12004 CASTELLON DE LA PLANA, CASTELLON/C</AdrLine>
</PstlAdr>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>ES9862342069989523042901</IBAN>
</Id>
</DbtrAcct>
</RltdPties>
<RltdAgts>
<DbtrAgt>
<FinInstnId>
<BIC>EVOBESMMXXX</BIC>
</FinInstnId>
</DbtrAgt>
</RltdAgts>
<RmtInf>
<Ustrd>1098052330002 PAOLO OSCAR GARCIA</Ustrd>
</RmtInf>
</TxDtls>
</NtryDtls>
</Ntry>
<Ntry>
<NtryRef>2014012300203432-1</NtryRef>
<Amt Ccy="EUR">68.97</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>BOOK</Sts>
<BookgDt>
<Dt>2014-01-23</Dt>
</BookgDt>
<ValDt>
<Dt>2014-01-23</Dt>
</ValDt>
<AcctSvcrRef>2014012300203432-1</AcctSvcrRef>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>RCDT</Cd>
<SubFmlyCd>DMCT</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Cd>MK</Cd>
<Issr>Swedbank AS</Issr>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<AcctSvcrRef>2014012300203432-1</AcctSvcrRef>
<InstrId>11</InstrId>
</Refs>
<AmtDtls>
<TxAmt>
<Amt Ccy="EUR">68.97</Amt>
</TxAmt>
</AmtDtls>
<RltdPties>
<Dbtr>
<Nm>Paul Hark</Nm>
<Id>
<PrvtId>
<Othr>
<Id>3933034216</Id>
</Othr>
</PrvtId>
</Id>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>EE634129278536542306</IBAN>
</Id>
</DbtrAcct>
</RltdPties>
<RltdAgts>
<DbtrAgt>
<FinInstnId>
<BIC>EKRDEE22</BIC>
</FinInstnId>
</DbtrAgt>
</RltdAgts>
<RmtInf>
<Ustrd>Nooruse 17-2 Arve nr. 109316 Paul Hark</Ustrd>
<Strd>
<CdtrRefInf>
<Tp>
<CdOrPrtry>
<Cd>SCOR</Cd>
</CdOrPrtry>
</Tp>
<Ref>1093160210005</Ref>
</CdtrRefInf>
</Strd>
</RmtInf>
</TxDtls>
</NtryDtls>
</Ntry>
</BkToCstmrAcctRpt>
</Document>
Sellise faili lugemina käib nagu ikka
XmlDocument xdoc = new XmlDocument();
xdoc.Load(file);
kuna dokumendil on nimeruum siis tuleb see XmlNamespaceManageri kasutades ära näidata
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
nsmgr.AddNamespace("bk", "urn:iso:std:iso:20022:tech:xsd:camt.052.001.02");
bk on nüüd nimeruumi alias mida XPathis kasutada tuleb.
Paar asja mis tuleb tähele panna
Esiteks nimeruumi kasutamine XPath otsingus, alias tuleb iga pathi ette kirjutada
bk defineerisime AddNamespace meetodiga
XmlNode nod = xdoc.SelectSingleNode("//bk:Rpt//bk:Acct//bk:Id//bk:IBAN", nsmgr);
string pkood = nod.InnerText.Trim();
ehk näite põhjal tuleb vastuseks EE112670221023582381
Teiseks foreach tsüklis tipule viitamine, siin tuleb XPath avaldist alustada punktiga
XmlNodeList rows = xdoc.SelectNodes("//bk:Ntry", nsmgr);
foreach (XmlNode nrow in rows)
{
nod = nrow.SelectSingleNode(".//bk:NtryDtls//bk:TxDtls//bk:RltdPties//bk:Dbtr//bk:Nm", nsmgr);
}
kui punkti algusse ei pane siis tsükkel võtab alati esimese leitud XPathi avaldise tulemuse
reede, 29. november 2013
TableAdapteri CommandTimeouti muutmine
Mõnikord juhtub, et andmebaasis pikk päring ja vaja CommandTimeouti pikemaks panna, et veebiserver ära ei katkestaks, seda saab teha partial klassiga
PAST_DUE_ACCOUNTS_S on TableAdapteri klassi nimi millele tuleb uus klass lisada
public partial class PAST_DUE_ACCOUNTS_STableAdapter
{
public void SetCommandTimeout(int timeout)
{
foreach (IDbCommand command in CommandCollection)
command.CommandTimeout = timeout;
}
}
PAST_DUE_ACCOUNTS_S on TableAdapteri klassi nimi millele tuleb uus klass lisada
public partial class PAST_DUE_ACCOUNTS_STableAdapter
{
public void SetCommandTimeout(int timeout)
{
foreach (IDbCommand command in CommandCollection)
command.CommandTimeout = timeout;
}
}
kolmapäev, 4. september 2013
IIS8 kliendi sertfikaadiga veebilehe autentimine
Kui on veebirakendusel mõnele aspx lehele peale seatud Client Certificates - Require, ehk
lehele ligipääsuks tuleb ID-kaardiga autentida. Kui hakkab pilduma viga 403-Forbidden: Access is denied
Siis asja töölesaamiseks kontrolli ka, et IIS-i URL Authorization role komponent oleks installitud
lehele ligipääsuks tuleb ID-kaardiga autentida. Kui hakkab pilduma viga 403-Forbidden: Access is denied
Siis asja töölesaamiseks kontrolli ka, et IIS-i URL Authorization role komponent oleks installitud
esmaspäev, 2. september 2013
IIS8 tõstutundlikkus ehk Ambiguous match found
IIS8 peal selline asi enam läbi ei lähe
Veebirakendus on .NET. 4.0 tehtud ja veebilehel on kontroll ID-ga "LTA"
ja code-behindis on defineeritud muutuja
private decimal lta = 0.0M;
this.LTA.Text=String.Format("{0:F2}", this.lta);
ehk on nii lta kui LTA mille peale projekt VisualStudio2010 õnnelikult kompileerub, kuid kävitamisel veebilehe avamisel saab vea Ambiguous match found.
Lahenduseks see, et ühe muutuja nime tuleb muuta
Veebirakendus on .NET. 4.0 tehtud ja veebilehel on kontroll ID-ga "LTA"
<asp:Literal ID="LTA" runat="server" Text="0.0"></asp:Literal>
ja code-behindis on defineeritud muutuja
private decimal lta = 0.0M;
this.LTA.Text=String.Format("{0:F2}", this.lta);
ehk on nii lta kui LTA mille peale projekt VisualStudio2010 õnnelikult kompileerub, kuid kävitamisel veebilehe avamisel saab vea Ambiguous match found.
Lahenduseks see, et ühe muutuja nime tuleb muuta
<asp:Literal ID="LiTA" runat="server" Text="0.0"></asp:Literal>this.LiTA.Text=String.Format("{0:F2}", this.lta);
Tellimine:
Postitused (Atom)



