เช‰เชจเซเชฎเชคเซเชค เชฅเชฏเชพ เชตเชฟเชจเชพ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡ เชจเชฟเชฏเชฎเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเชพ

เชนเซ‡ เชนเชฌเชฐ!

เช…เชฎเชพเชฐเชพ เช•เชพเชฐเซเชฏเชฎเชพเช‚, เช…เชฎเชพเชฐเซ€ เช•เช‚เชชเชจเซ€ เช˜เชฃเซ€ เชตเชพเชฐ เชตเชฟเชตเชฟเชง เชธเซเชŸเซ‡เชŸเชฟเช• เช•เซ‹เชก เชเชจเชพเชฒเชฟเชธเชฟเชธ เชŸเซ‚เชฒเซเชธ (SAST) เชธเชพเชฅเซ‡ เชตเซเชฏเชตเชนเชพเชฐ เช•เชฐเซ‡ เช›เซ‡. เชฌเซ‰เช•เซเชธเชจเซ€ เชฌเชนเชพเชฐ เชคเซ‡เช“ เชฌเชงเชพ เชธเชฐเซ‡เชฐเชพเชถ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เช…เชฒเชฌเชคเซเชค, เชคเซ‡ เชฌเชงเซเช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชตเชชเชฐเชพเชคเซ€ เชคเช•เชจเซ€เช•เซ‹ เชคเซ‡เชฎเชœ เชตเชฟเชถเซเชฒเซ‡เชทเชฃเชจเชพ เชจเชฟเชฏเชฎเซ‹ เชฆเซเชตเชพเชฐเชพ เช† เชคเช•เชจเซ€เช•เซ€เช“ เช•เซ‡เชŸเชฒเซ€ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เช†เชตเชฐเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ‡ เช›เซ‡. เชฎเชพเชฐเชพ เชฎเชคเซ‡, SAST เชŸเซ‚เชฒ เชชเชธเช‚เชฆ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชธเซŒเชฅเซ€ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชฎเชพเชชเชฆเช‚เชกเซ‹ เชชเซˆเช•เซ€ เชเช• เช›เซ‡ เชคเซ‡เชจเซ‡ เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ€ เชตเชฟเชถเชฟเชทเซเชŸเชคเชพเช“ เช…เชจเซเชธเชพเชฐ เช•เชธเซเชŸเชฎเชพเช‡เช เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ, เชเชŸเชฒเซ‡ เช•เซ‡, เชตเชฟเชถเซเชฒเซ‡เชทเชฃเชจเชพ เชจเชฟเชฏเชฎเซ‹ เชฒเช–เชตเชพ เช…เชจเซ‡ เชฌเชฆเชฒเชตเชพ เช…เชฅเชตเชพ, เชœเซ‡เชฎเชจเซ‡ เชตเชงเซ เชตเช–เชค เช•เชธเซเชŸเชฎ เช•เซเชตเซ‡เชฐเซ€เช เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เช‰เชจเซเชฎเชคเซเชค เชฅเชฏเชพ เชตเชฟเชจเชพ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡ เชจเชฟเชฏเชฎเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเชพ

เช…เชฎเซ‡ เชฎเซ‹เชŸเซ‡เชญเชพเช—เซ‡ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช - เชเช• เช–เซ‚เชฌ เชœ เชฐเชธเชชเซเชฐเชฆ เช…เชจเซ‡ เชถเช•เซเชคเชฟเชถเชพเชณเซ€ เช•เซ‹เชก เชตเชฟเชถเซเชฒเซ‡เชทเช•. เช† เชฒเซ‡เช–เชฎเชพเช‚ เชนเซเช‚ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชจเชฟเชฏเชฎเซ‹ เชฒเช–เชตเชพเชจเชพ เชฎเชพเชฐเชพ เช…เชจเซเชญเชต เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€เชถ.

เชธเชฎเชพเชตเชฟเชทเซเชŸเซ‹เชจเซเช‚ เช•เซ‹เชทเซเชŸเช•

เชชเชฐเชฟเชšเชฏ

เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เชนเซเช‚ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡ เชชเซเชฐเชถเซเชจเซ‹ เชฒเช–เชตเชพเชจเซ€ เชตเชฟเชถเซ‡เชทเชคเชพเช“ เชตเชฟเชถเซ‡ เชฐเชถเชฟเชฏเชจเชฎเชพเช‚ เชฅเซ‹เชกเชพ เชฒเซ‡เช–เซ‹เชฎเชพเช‚เชฅเซ€ เชเช•เชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚. เชคเซ‡ เชถเซ€เชฐเซเชทเช• เชนเซ‡เช เชณ 2019 เชจเชพ เช…เช‚เชคเชฎเชพเช‚ เชนเซ‡เชฌเซเชฐเซ‡ เชชเชฐ เชชเซเชฐเช•เชพเชถเชฟเชค เชฅเชฏเซเช‚ เชนเชคเซเช‚: "เชนเซ‡เชฒเซ‹, เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ!" เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ SAST เช•เซเชตเซ‡เชฐเซ€ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเซ€ เช…เชจเซ‡ เชถเชพเชจเชฆเชพเชฐ เชจเชฌเชณเชพเชˆเช“ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชถเซ‹เชงเชตเซ€.

เชคเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชชเชฐเซ€เช•เซเชทเชฃ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ CxQL (เชšเซ‡เช•เชฎเชพเชฐเซเช• เช•เซเชตเซ‡เชฐเซ€ เชฒเซ‡เช‚เช—เซเชตเซ‡เชœ) เชฎเชพเช‚ เชชเซเชฐเชฅเชฎ เช•เซเชตเซ‡เชฐเซ€ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเซ€ เชคเซ‡ เชตเชฟเช—เชคเชตเชพเชฐ เชคเชชเชพเชธเซ‡ เช›เซ‡ เช…เชจเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชจเชฟเชฏเชฎเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เชฎเซ‚เชณเชญเซ‚เชค เชธเชฟเชฆเซเชงเชพเช‚เชคเซ‹ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡.

เชคเซ‡เชฎเชพเช‚ เชœเซ‡ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡ เชคเซ‡ เชนเซเช‚ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เช•เชฐเซ€เชถ เชจเชนเซ€เช‚, เชœเซ‹ เช•เซ‡ เช•เซ‡เชŸเชฒเชพเช• เช†เช‚เชคเชฐเช›เซ‡เชฆ เชนเชœเซ€ เชชเชฃ เชนเชพเชœเชฐ เชฐเชนเซ‡เชถเซ‡. เชฎเชพเชฐเชพ เชฒเซ‡เช–เชฎเชพเช‚ เชนเซเช‚ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชธเชพเชฅเซ‡เชจเชพ เชฎเชพเชฐเชพ เช•เชพเชฐเซเชฏ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชฎเชจเซ‡ เชœเซ‡ เชšเซ‹เช•เซเช•เชธ เชธเชฎเชธเซเชฏเชพเช“เชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเซ‹ เชชเชกเซเชฏเซ‹ เชนเชคเซ‹ เชคเซ‡เชจเชพ เช‰เช•เซ‡เชฒเซ‹เชจเซ€ เชธเซ‚เชšเชฟ, เชเช• เชชเซเชฐเช•เชพเชฐเชจเซ€ "เชฐเซ‡เชธเชฟเชชเซ€เชจเซ‹ เชธเช‚เช—เซเชฐเชน" เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เชถ. เช†เชฎเชพเช‚เชจเซ€ เช˜เชฃเซ€ เชธเชฎเชธเซเชฏเชพเช“ เชชเชฐ เชฎเชพเชฐเซ‡ เชฎเชพเชฐเชพ เชฎเช—เชœเชจเซ‡ เชฐเซ‡เช• เช•เชฐเชตเซเช‚ เชชเชกเซเชฏเซเช‚. เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹เชฎเชพเช‚ เชชเซ‚เชฐเชคเซ€ เชฎเชพเชนเชฟเชคเซ€ เชจ เชนเชคเซ€, เช…เชจเซ‡ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเชตเซเช‚ เชคเซ‡ เชธเชฎเชœเชตเซเช‚ เชชเชฃ เชฎเซเชถเซเช•เซ‡เชฒ เชนเชคเซเช‚. เชนเซเช‚ เช†เชถเชพ เชฐเชพเช–เซเช‚ เช›เซเช‚ เช•เซ‡ เชฎเชพเชฐเซ‹ เช…เชจเซเชญเชต เช…เชจเซ‡ เชจเชฟเช‚เชฆเซเชฐเชพ เชตเชฟเชจเชพเชจเซ€ เชฐเชพเชคเซ‹ เชจเชฟเชฐเชฐเซเชฅเช• เชจเชนเซ€เช‚ เชœเชพเชฏ, เช…เชจเซ‡ เช† "เช•เชธเซเชŸเชฎ เช•เซเชตเซ‡เชฐเซ€เช เชฐเซ‡เชธเชฟเชชเซ€เชจเซ‹ เชธเช‚เช—เซเชฐเชน" เชคเชฎเชจเซ‡ เชฅเซ‹เชกเชพ เช•เชฒเชพเช•เซ‹ เช…เชฅเชตเชพ เชฌเซ‡ เชšเซ‡เชคเชพ เช•เซ‹เชทเซ‹ เชฌเชšเชพเชตเชถเซ‡. เชคเซ‡เชฅเซ€, เชšเชพเชฒเซ‹ เชถเชฐเซ‚ เช•เชฐเซ€เช!

เชจเชฟเชฏเชฎเซ‹ เชชเชฐ เชธเชพเชฎเชพเชจเซเชฏ เชฎเชพเชนเชฟเชคเซ€

เชชเซเชฐเชฅเชฎ, เชšเชพเชฒเซ‹ เช†เช—เชณ เชถเซเช‚ เชฅเชถเซ‡ เชคเซ‡เชจเซ€ เชตเชงเซ เชธเชพเชฐเซ€ เชธเชฎเชœเชฃ เชฎเชพเชŸเซ‡, เชฅเซ‹เชกเชพ เชฎเซ‚เชณเชญเซ‚เชค เช–เซเชฏเชพเชฒเซ‹ เช…เชจเซ‡ เชจเชฟเชฏเชฎเซ‹ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชœเซ‹เชˆเช. เช…เชจเซ‡ เช เชชเชฃ เช•เชพเชฐเชฃ เช•เซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เช† เชตเชฟเชถเซ‡ เช•เช‚เชˆเชชเชฃ เช•เชนเซ‡เชคเซเช‚ เชจเชฅเซ€ เช…เชฅเชตเชพ เชฌเช‚เชงเชพเชฐเชฃเชฎเชพเช‚ เช–เซ‚เชฌ เชœ เชซเซ‡เชฒเชพเชฏเซ‡เชฒเซเช‚ เช›เซ‡, เชœเซ‡ เช–เซ‚เชฌ เช…เชจเซเช•เซ‚เชณ เชจเชฅเซ€.

  1. เชธเซเช•เซ‡เชจเชฟเช‚เช— เชฆเชฐเชฎเชฟเชฏเชพเชจ เชจเชฟเชฏเชฎเซ‹ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒเชพ เชชเซเชฐเซ€เชธเซ‡เชŸเชจเชพ เช†เชงเชพเชฐเซ‡ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เชธเช•เซเชฐเชฟเชฏ เชจเชฟเชฏเชฎเซ‹เชจเซ‹ เชธเชฎเซ‚เชน). เชคเชฎเซ‡ เช…เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชชเซเชฐเซ€เชธเซ‡เชŸเซเชธ เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹, เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเซเชŸเซเชฐเช•เซเชšเชฐ เช•เชฐเชตเซเช‚ เชคเซ‡ เชคเชฎเชพเชฐเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ€ เชตเชฟเชถเชฟเชทเซเชŸเชคเชพเช“ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡. เชคเชฎเซ‡ เชคเซ‡เชฎเชจเซ‡ เชญเชพเชทเชพ เชฆเซเชตเชพเชฐเชพ เชœเซ‚เชฅเชฌเชฆเซเชง เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชฅเชตเชพ เชฆเชฐเซ‡เช• เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ เชชเซเชฐเซ€เชธเซ‡เชŸเซเชธ เชชเชธเช‚เชฆ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เชธเช•เซเชฐเชฟเชฏ เชจเชฟเชฏเชฎเซ‹เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชธเซเช•เซ‡เชจเซ€เช‚เช—เชจเซ€ เชเชกเชช เช…เชจเซ‡ เชšเซ‹เช•เชธเชพเชˆเชจเซ‡ เช…เชธเชฐ เช•เชฐเซ‡ เช›เซ‡.

    เช‰เชจเซเชฎเชคเซเชค เชฅเชฏเชพ เชตเชฟเชจเชพ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡ เชจเชฟเชฏเชฎเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเชพเชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เช‡เชจเซเชŸเชฐเชซเซ‡เชธเชฎเชพเช‚ เชชเซเชฐเซ€เชธเซ‡เชŸ เชธเซ‡เชŸ เช•เชฐเชตเซเช‚

  2. เชจเชฟเชฏเชฎเซ‹ CxAuditor เชจเชพเชฎเชจเชพ เชตเชฟเชถเชฟเชทเซเชŸ เชธเชพเชงเชจเชฎเชพเช‚ เชธเช‚เชชเชพเชฆเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช† เชเช• เชกเซ‡เชธเซเช•เชŸเซ‹เชช เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช›เซ‡ เชœเซ‡ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชšเชฒเชพเชตเชคเชพ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏ เช›เซ‡. เช† เชŸเซ‚เชฒเชฎเชพเช‚ เช“เชชเชฐเซ‡เชถเชจเชจเชพ เชฌเซ‡ เชฎเซ‹เชก เช›เซ‡: เชจเชฟเชฏเชฎเซ‹เชจเซเช‚ เชธเช‚เชชเชพเชฆเชจ เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เช•เชฐเซ‡เชฒเชพ เชธเซเช•เซ‡เชจเชจเชพเช‚ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ.

    เช‰เชจเซเชฎเชคเซเชค เชฅเชฏเชพ เชตเชฟเชจเชพ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡ เชจเชฟเชฏเชฎเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเชพCxAudit เชˆเชจเซเชŸเชฐเชซเซ‡เชธ

  3. เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธเชฎเชพเช‚ เชจเชฟเชฏเชฎเซ‹ เชญเชพเชทเชพ เชฆเซเชตเชพเชฐเชพ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เชฆเชฐเซ‡เช• เชญเชพเชทเชพเชจเซ€ เชชเซ‹เชคเชพเชจเซ€ เช•เซเชตเซ‡เชฐเซ€เชเชจเซ‹ เชธเชฎเซ‚เชน เชนเซ‹เชฏ เช›เซ‡. เช•เซ‡เชŸเชฒเชพเช• เชธเชพเชฎเชพเชจเซเชฏ เชจเชฟเชฏเชฎเซ‹ เชชเชฃ เช›เซ‡ เชœเซ‡ เชญเชพเชทเชพเชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ€เชงเชพ เชตเชฟเชจเชพ เชฒเชพเช—เซ เชชเชกเซ‡ เช›เซ‡, เช† เช•เชนเซ‡เชตเชพเชคเชพ เชฎเซ‚เชณเชญเซ‚เชค เชชเซเชฐเชถเซเชจเซ‹ เช›เซ‡. เชฎเซ‹เชŸเชพเชญเชพเช—เซ‡, เชฎเซ‚เชณเชญเซ‚เชค เชชเซเชฐเชถเซเชจเซ‹เชฎเชพเช‚ เช…เชจเซเชฏ เชจเชฟเชฏเชฎเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซ€ เชฎเชพเชนเชฟเชคเซ€ เชถเซ‹เชงเชตเชพเชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡.

    เช‰เชจเซเชฎเชคเซเชค เชฅเชฏเชพ เชตเชฟเชจเชพ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡ เชจเชฟเชฏเชฎเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเชพเชญเชพเชทเชพ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฏเชฎเซ‹เชจเซเช‚ เชตเชฟเชญเชพเชœเชจ

  4. เชจเชฟเชฏเชฎเซ‹ "เชเช•เซเชเชฟเช•เซเชฏเซเชŸเซ‡เชฌเชฒ" เช…เชจเซ‡ "เชจเซ‹เชจ-เชเช•เซเชเซ€เช•เซเชฏเซเชŸเซ‡เชฌเชฒ" (เชเช•เซเชเซ€เช•เซเชฏเซเชŸเซ‡เชก เช…เชจเซ‡ เชจเซ‹เชŸ เชเช•เซเชเชฟเช•เซเชฏเซเชŸเซ‡เชฌเชฒ) เช›เซ‡. เชฎเชพเชฐเชพ เชฎเชคเซ‡, เชคเชฆเซเชฆเชจ เชธเชพเชšเซเช‚ เชจเชพเชฎ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡ เชคเซ‡ เชœ เช›เซ‡. เชฌเซ‹เชŸเชฎ เชฒเชพเช‡เชจ เช เช›เซ‡ เช•เซ‡ "เชเช•เซเชเชฟเช•เซเชฏเซเชŸเซ‡เชฌเชฒ" เชจเชฟเชฏเชฎเซ‹เชจเชพ เช…เชฎเชฒเซ€เช•เชฐเชฃเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ UI เชฎเชพเช‚ เชธเซเช•เซ‡เชจ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชฎเชพเช‚ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชถเซ‡, เช…เชจเซ‡ "เชจเซ‹เชจ-เชเช•เซเชเชฟเช•เซเชฏเซเชŸเซ‡เชฌเชฒ" เชจเชฟเชฏเชฎเซ‹ เชซเช•เซเชค เชคเซ‡เชฎเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‹ เช…เชจเซเชฏ เชตเชฟเชจเช‚เชคเซ€เช“เชฎเชพเช‚ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡ (เชธเชพเชฐเชฎเชพเช‚, เชฎเชพเชคเซเชฐ เชเช• เช•เชพเชฐเซเชฏ).

    เช‰เชจเซเชฎเชคเซเชค เชฅเชฏเชพ เชตเชฟเชจเชพ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡ เชจเชฟเชฏเชฎเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเชพเชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เชจเชฟเชฏเชฎเชจเซ‹ เชชเซเชฐเช•เชพเชฐ เชจเช•เซเช•เซ€ เช•เชฐเชตเซ‹

  5. เชคเชฎเซ‡ เชจเชตเชพ เชจเชฟเชฏเชฎเซ‹ เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชฅเชตเชพ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เชฐเชนเซ‡เชฒเชพ เชจเชฟเชฏเชฎเซ‹เชจเซ€ เชชเซ‚เชฐเซเชคเชฟ/เชซเชฐเซ€เชฅเซ€ เชฒเช–เซ€ เชถเช•เซ‹ เช›เซ‹. เชจเชฟเชฏเชฎเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฒเช–เชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชตเซƒเช•เซเชทเชฎเชพเช‚ เชถเซ‹เชงเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชœเชฎเชฃเซเช‚-เช•เซเชฒเชฟเช• เช•เชฐเซ‹ เช…เชจเซ‡ เชกเซเชฐเซ‹เชช-เชกเชพเช‰เชจ เชฎเซ‡เชจเซ‚เชฎเชพเช‚เชฅเซ€ "เช“เชตเชฐเชฐเชพเช‡เชก" เชชเชธเช‚เชฆ เช•เชฐเซ‹. เช…เชนเซ€เช‚ เชฏเชพเชฆ เชฐเชพเช–เชตเซเช‚ เช…เช—เชคเซเชฏเชจเซเช‚ เช›เซ‡ เช•เซ‡ เชจเชตเชพ เชจเชฟเชฏเชฎเซ‹ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เชชเซเชฐเซ€เชธเซ‡เชŸเซเชธเชฎเชพเช‚ เชธเชฎเชพเชตเชฟเชทเซเชŸ เชจเชฅเซ€ เช…เชจเซ‡ เชธเช•เซเชฐเชฟเชฏ เชจเชฅเซ€. เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชฎเชจเซ‡ เชธเชพเชงเชจเชฎเชพเช‚เชจเชพ "เชชเซเชฐเซ€เชธเซ‡เชŸ เชฎเซ‡เชจเซ‡เชœเชฐ" เชฎเซ‡เชจเซ‚เชฎเชพเช‚ เชธเช•เซเชฐเชฟเชฏ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชซเชฐเซ€เชฅเซ€ เชฒเช–เซ‡เชฒเชพ เชจเชฟเชฏเชฎเซ‹ เชคเซ‡เชฎเชจเซ€ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชœเชพเชณเชตเซ€ เชฐเชพเช–เซ‡ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เชœเซ‹ เชจเชฟเชฏเชฎ เชธเช•เซเชฐเชฟเชฏ เชนเชคเซ‹, เชคเซ‹ เชคเซ‡ เชคเซ‡เชตเซ‹ เชœ เชฐเชนเซ‡เชถเซ‡ เช…เชจเซ‡ เชคเชฐเชค เชœ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

    เช‰เชจเซเชฎเชคเซเชค เชฅเชฏเชพ เชตเชฟเชจเชพ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡ เชจเชฟเชฏเชฎเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเชพเชชเซเชฐเซ€เชธเซ‡เชŸ เชฎเซ‡เชจเซ‡เชœเชฐ เชˆเชจเซเชŸเชฐเชซเซ‡เชธเชฎเชพเช‚ เชจเชตเชพ เชจเชฟเชฏเชฎเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ

  6. เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชตเชฟเชจเช‚เชคเซ€เช“เชจเซเช‚ "เชตเซƒเช•เซเชท" เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซ‡ เชคเซ‡เชจเชพ เชชเชฐ เชจเชฟเชฐเซเชญเชฐ เช›เซ‡. เชจเชฟเชฏเชฎเซ‹ เช•เซ‡ เชœเซ‡ เชฎเชพเชนเชฟเชคเซ€ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชชเซเชฐเชฅเชฎ เช…เชฎเชฒเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชœเซ‡เช“ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชฌเซ€เชœเชพ. เช…เชฎเชฒเซ€เช•เชฐเชฃเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เช•เซ‡เชถเซเชก เช›เซ‡, เชคเซ‡เชฅเซ€ เชœเซ‹ เชนเชพเชฒเชจเชพ เชจเชฟเชฏเชฎเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชถเช•เซเชฏ เช›เซ‡, เชคเซ‹ เชคเซ‡ เช•เชฐเชตเซเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡, เช† เชธเซเช•เซ‡เชจเชฟเช‚เช— เชธเชฎเชฏเชจเซ‡ เช˜เชŸเชพเชกเชถเซ‡.

  7. เชจเชฟเชฏเชฎเซ‹ เชตเชฟเชตเชฟเชง เชธเซเชคเชฐเซ‡ เชฒเชพเช—เซ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡:

  • เชธเชฎเช—เซเชฐ เชธเชฟเชธเซเชŸเชฎ เชฎเชพเชŸเซ‡ - เช•เซ‹เชˆเชชเชฃ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เช•เซ‹เชˆเชชเชฃ เชธเซเช•เซ‡เชจเชฟเช‚เช— เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชถเซ‡

  • เชŸเซ€เชฎ เชธเซเชคเชฐเซ‡ (เชŸเซ€เชฎ) - เชซเช•เซเชค เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒ เชŸเซ€เชฎเชฎเชพเช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเซเช•เซ‡เชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชถเซ‡.

  • เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเซเชคเชฐเซ‡ - เชšเซ‹เช•เซเช•เชธ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡

    เช‰เชจเซเชฎเชคเซเชค เชฅเชฏเชพ เชตเชฟเชจเชพ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡ เชจเชฟเชฏเชฎเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเชพเชจเชฟเชฏเชฎ เช•เชฏเชพ เชธเซเชคเชฐเซ‡ เชฒเชพเช—เซ เชฅเชถเซ‡ เชคเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเชตเซเช‚

เชจเชตเชพ เชจเชฟเชถเชพเชณเซ€เชฏเชพ เชฎเชพเชŸเซ‡ "เชถเชฌเซเชฆเช•เซ‹เชท".

เช…เชจเซ‡ เชนเซเช‚ เช•เซ‡เชŸเชฒเซ€เช• เชฌเชพเชฌเชคเซ‹เชฅเซ€ เชถเชฐเซ‚เช†เชค เช•เชฐเซ€เชถ เชœเซ‡เชจเชพ เช•เชพเชฐเชฃเซ‡ เชฎเชจเซ‡ เชชเซเชฐเชถเซเชจเซ‹ เชฅเชฏเชพ, เช…เชจเซ‡ เชนเซเช‚ เช˜เชฃเซ€ เชฌเชงเซ€ เชคเช•เชจเซ€เช•เซ‹ เชชเชฃ เชฌเชคเชพเชตเซ€เชถ เชœเซ‡ เชœเซ€เชตเชจเชจเซ‡ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเชถเซ‡.

เชฏเชพเชฆเซ€เช“ เชธเชพเชฅเซ‡ เช•เชพเชฎเช—เซ€เชฐเซ€

- ะฒั‹ั‡ะธั‚ะฐะฝะธะต ะพะดะฝะพะณะพ ะธะท ะดั€ัƒะณะพะณะพ (list2 - list1)
* ะฟะตั€ะตัะตั‡ะตะฝะธะต ัะฟะธัะบะพะฒ (list1 * list2)
+ ัะปะพะถะตะฝะธะต ัะฟะธัะบะพะฒ (list1 + list2)

& (ะปะพะณะธั‡ะตัะบะพะต ะ˜) - ะพะฑัŠะตะดะธะฝัะตั‚ ัะฟะธัะบะธ ะฟะพ ัะพะฒะฟะฐะดะตะฝะธัŽ (list1 & list2), ะฐะฝะฐะปะพะณะธั‡ะฝะพ ะฟะตั€ะตัะตั‡ะตะฝะธัŽ (list1 * list2)
| (ะปะพะณะธั‡ะตัะบะพะต ะ˜ะ›ะ˜) - ะพะฑัŠะตะดะธะฝัะตั‚ ัะฟะธัะบะธ ะฟะพ ัˆะธั€ะพะบะพะผัƒ ะฟะพะธัะบัƒ (list1 | list2)

ะกะพ ัะฟะธัะบะฐะผะธ ะฝะต ั€ะฐะฑะพั‚ะฐะตั‚:  ^  &&  ||  %  / 

เชฌเชงเซ€ เชตเชธเซเชคเซเช“ เชฎเชณเซ€

เชธเซเช•เซ‡เชจ เช•เชฐเซ‡เชฒเซ€ เชญเชพเชทเชพเชฎเชพเช‚, เชคเชฎเซ‡ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฆเซเชตเชพเชฐเชพ เช“เชณเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒเชพ เชคเชฎเชพเชฎ เช˜เชŸเช•เซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชฎเซ‡เชณเชตเซ€ เชถเช•เซ‹ เช›เซ‹ (เชถเชฌเซเชฆเชฎเชพเชณเชพเช“, เช•เชพเชฐเซเชฏเซ‹, เชตเชฐเซเช—เซ‹, เชชเชฆเซเชงเชคเชฟเช“, เชตเช—เซ‡เชฐเซ‡). เช† เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธเชจเซ€ เช…เชฎเซเช• เชœเช—เซเชฏเชพ เช›เซ‡ เชœเซ‡เชจเชพ เชฆเซเชตเชพเชฐเชพ เชเช•เซเชธเซ‡เชธ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ All. เชเชŸเชฒเซ‡ เช•เซ‡, เชšเซ‹เช•เซเช•เชธ เชจเชพเชฎ เชธเชพเชฅเซ‡ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชถเซ‹เชงเชตเชพ เชฎเชพเชŸเซ‡ searchMe, เชคเชฎเซ‡ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเชฎเชพเชฎ เชฎเชณเซ‡เชฒ เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธเชฎเชพเช‚ เชจเชพเชฎ เชฆเซเชตเชพเชฐเชพ:

// ะขะฐะบะพะน ะทะฐะฟั€ะพั ะฒั‹ะดะฐัั‚ ะฒัะต ัะปะตะผะตะฝั‚ั‹
result = All;

// ะขะฐะบะพะน ะทะฐะฟั€ะพั ะฒั‹ะดะฐัั‚ ะฒัะต ัะปะตะผะตะฝั‚ั‹, ะฒ ะธะผะตะฝะธ ะบะพั‚ะพั€ั‹ั… ะฟั€ะธััƒั‚ัั‚ะฒัƒะตั‚ โ€œsearchMeโ€œ
result = All.FindByName("searchMe");

เชชเชฐเช‚เชคเซ, เชœเซ‹ เชคเชฎเชพเชฐเซ‡ เชฌเซ€เชœเซ€ เชญเชพเชทเชพเชฎเชพเช‚ เชถเซ‹เชงเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เช•เซ‡ เชœเซ‡ เช•เซ‹เชˆ เช•เชพเชฐเชฃเชธเชฐ เชธเซเช•เซ‡เชจ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชเชจเซเชกเซเชฐเซ‹เช‡เชก เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เช—เซเชฐเซเชตเซ€) เชถเชพเชฎเซ‡เชฒ เชจ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเซ‡ เชตเซ‡เชฐเซ€เชเชฌเชฒ เชฆเซเชตเชพเชฐเชพ เช…เชฎเชพเชฐเซ€ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชธเซเชชเซ‡เชธเชจเซ‡ เชตเชฟเชธเซเชคเซƒเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹:

result = AllMembers.All.FindByName("searchMe");

เชชเซเชฐเชตเชพเชน เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชฎเชพเชŸเซ‡ เช•เชพเชฐเซเชฏเซ‹

เช† เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช˜เชฃเชพ เชจเชฟเชฏเชฎเซ‹เชฎเชพเช‚ เชฅเชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช…เชฐเซเชฅ เชถเซเช‚ เช›เซ‡ เชคเซ‡เชจเซ€ เชฅเซ‹เชกเซ€ เชšเซ€เชŸ เชถเซ€เชŸ เช…เชนเซ€เช‚ เช›เซ‡:

// ะšะฐะบะธะต ะดะฐะฝะฝั‹ะต second ะฒะปะธััŽั‚ ะฝะฐ first.
// ะ”ั€ัƒะณะธะผะธ ัะปะพะฒะฐะผะธ - ะขะž (second) ั‡ั‚ะพ ะฒะปะธัะตั‚ ะฝะฐ  ะœะ•ะะฏ (first).
result = first.DataInfluencedBy(second);

// ะšะฐะบะธะต ะดะฐะฝะฝั‹ะต first ะฒะปะธััŽั‚ ะฝะฐ second.
// ะ”ั€ัƒะณะธะผะธ ัะปะพะฒะฐะผะธ - ะฏ (first) ะฒะปะธััŽ ะฝะฐ ะขะž (second).
result = first.DataInfluencingOn(second);

เชซเชพเช‡เชฒเชจเซเช‚ เชจเชพเชฎ/เชชเชพเชฅ เชฎเซ‡เชณเชตเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

เชคเซเชฏเชพเช‚ เช˜เชฃเซ€ เชตเชฟเชถเซ‡เชทเชคเชพเช“ เช›เซ‡ เชœเซ‡ เช•เซเชตเซ‡เชฐเซ€เชจเชพเช‚ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชฎเชพเช‚เชฅเซ€ เชฎเซ‡เชณเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡ (เชซเชพเช‡เชฒเชจเซเช‚ เชจเชพเชฎ เชœเซ‡เชฎเชพเช‚ เชเชจเซเชŸเซเชฐเซ€ เชฎเชณเซ€ เช†เชตเซ€ เชนเชคเซ€, เชธเซเชŸเซเชฐเชฟเช‚เช—, เชตเช—เซ‡เชฐเซ‡), เชชเชฐเช‚เชคเซ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชคเซ‡เชฎเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซเช‚ เช…เชจเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชคเซ‡ เชœเชฃเชพเชตเชคเซเช‚ เชจเชฅเซ€. เชคเซ‡เชฅเซ€, เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ LinePragma เชชเซเชฐเซ‹เชชเชฐเซเชŸเซ€เชจเซ‡ เชเช•เซเชธเซ‡เชธ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช…เชจเซ‡ เช…เชฎเชจเซ‡ เชœเซ‹เชˆเชคเซ€ เชตเชธเซเชคเซเช“ เชคเซ‡เชจเซ€ เช…เช‚เชฆเชฐ เชธเซเชฅเชฟเชค เชนเชถเซ‡:

// ะ”ะปั ะฟั€ะธะผะตั€ะฐ ะฝะฐะนะดะตะผ ะฒัะต ะผะตั‚ะพะดั‹
CxList methods = Find_Methods();

// ะ’ ะผะตั‚ะพะดะฐั… ะฝะฐะนะดะตะผ ะฟะพ ะธะผะตะฝะธ ะผะตั‚ะพะด scope
CxList scope = methods.FindByName("scope");

// ะขะฐะบะธะผ ะพะฑั€ะฐะทะพะผ ะผะพะถะพ ะฟะพะปัƒั‡ะธั‚ัŒ ะฟัƒั‚ัŒ ะบ ั„ะฐะนะปัƒ
string current_filename = scope.GetFirstGraph().LinePragma.FileName;

// ะ ะฒะพั‚ ั‚ะฐะบะธะผ - ัั‚ั€ะพะบัƒ, ะณะดะต ะฝะฐัˆะปะพััŒ ัั€ะฐะฑะฐั‚ั‹ะฒะฐะฝะธะต
int current_line = scope.GetFirstGraph().LinePragma.Line;

// ะญั‚ะธ ะฟะฐั€ะฐะผะตั‚ั€ั‹ ะผะพะถะฝะพ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะฟะพ ั€ะฐะทะฝะพะผัƒ
// ะะฐะฟั€ะธะผะตั€ ะฟะพะปัƒั‡ะธั‚ัŒ ะฒัะต ะพะฑัŠะตะบั‚ั‹ ะฒ ั„ะฐะนะปะต
CxList inFile = All.FindByFileName(current_filename);

// ะ˜ะปะธ ะฝะฐะนั‚ะธ ั‡ั‚ะพ ะฟั€ะพะธัั…ะพะดะธั‚ ะฒ ะบะพะฝะบั€ะตั‚ะฝะพะน ัั‚ั€ะพะบะต
CxList inLine = inFile.FindByPosition(current_line);

เชคเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฐเชพเช–เชตเชพ เชฏเซ‹เช—เซเชฏ เช›เซ‡ FileName เชตเชพเชธเซเชคเชตเชฎเชพเช‚ เชซเชพเช‡เชฒเชจเซ‹ เชชเชพเชฅ เชธเชฎเชพเชตเซ‡ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เช…เชฎเซ‡ เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เช›เซ‡ GetFirstGraph.

เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจ เชชเชฐเชฟเชฃเชพเชฎ

CxQL เชจเซ€ เช…เช‚เชฆเชฐ เชเช• เช–เชพเชธ เชšเชฒ เช›เซ‡ result, เชœเซ‡ เชคเชฎเชพเชฐเชพ เชฒเซ‡เช–เชฟเชค เชจเชฟเชฏเชฎเชจเซ‡ เชšเชฒเชพเชตเชตเชพเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เช†เชชเซ‡ เช›เซ‡. เชคเซ‡ เชคเชฐเชค เชœ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเซ‡ เชคเซ‡เชฎเชพเช‚ เชฎเชงเซเชฏเชตเชฐเซเชคเซ€ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชฒเช–เซ€ เชถเช•เซ‹ เช›เซ‹, เชคเชฎเซ‡ เช•เชพเชฎ เช•เชฐเซ‹ เช›เซ‹ เชคเซ‡เชฎ เชคเซ‡เชจเซ‡ เชฌเชฆเชฒเซ€เชจเซ‡ เช…เชจเซ‡ เชฐเชฟเชซเชพเช‡เชจ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เชชเชฐเช‚เชคเซ, เชœเซ‹ เชจเชฟเชฏเชฎเชจเซ€ เช…เช‚เชฆเชฐ เช† เชšเชฒ เช…เชฅเชตเชพ เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆ เช…เชธเชพเช‡เชจเชฎเซ‡เชจเซเชŸ เชจเชฅเซ€ return- เช…เชฎเชฒเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เชนเช‚เชฎเซ‡เชถเชพ เชถเซ‚เชจเซเชฏ เชฐเชนเซ‡เชถเซ‡.

เชจเซ€เชšเซ‡เชจเซ€ เช•เซเชตเซ‡เชฐเซ€ เช…เชฎเชฒเซ€เช•เชฐเชฃเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‡ เช…เชฎเชจเซ‡ เช•เช‚เชˆเชชเชฃ เชชเชฐเชค เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚ เช…เชจเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เช–เชพเชฒเซ€ เชฐเชนเซ‡เชถเซ‡:

// ะะฐั…ะพะดะธะผ ัะปะตะผะตะฝั‚ั‹ foo
CxList libraries = All.FindByName("foo");

เชชเชฐเช‚เชคเซ, เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจ เชชเชฐเชฟเชฃเชพเชฎเชจเซ‡ เชฎเซ‡เชœเชฟเช• เชตเซ‡เชฐเซ€เชเชฌเชฒ เชชเชฐเชฟเชฃเชพเชฎเชจเซ‡ เชธเซ‹เช‚เชชเซเชฏเชพ เชชเช›เซ€, เช…เชฎเซ‡ เชœเซ‹เชˆเชถเซเช‚ เช•เซ‡ เช† เช•เซ‰เชฒ เช…เชฎเชจเซ‡ เชถเซเช‚ เช†เชชเซ‡ เช›เซ‡:

// ะะฐั…ะพะดะธะผ ัะปะตะผะตะฝั‚ั‹ foo
CxList libraries = All.FindByName("foo");

// ะ’ั‹ะฒะพะดะธะผ, ะบะฐะบ ั€ะตะทัƒะปัŒั‚ะฐั‚ ะฒั‹ะฟะพะปะฝะตะฝะธั ะฟั€ะฐะฒะธะปะฐ
result = libraries

// ะ˜ะปะธ ะตั‰ะต ะบะพั€ะพั‡ะต
result = All.FindByName("foo");

เช…เชจเซเชฏ เชจเชฟเชฏเชฎเซ‹เชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡

เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธเชฎเชพเช‚ เชจเชฟเชฏเชฎเซ‹เชจเซ‡ เชจเชฟเชฏเชฎเชฟเชค เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพเชฎเชพเช‚ เชซเช‚เช•เซเชถเชจเซเชธ เชฎเชพเชŸเซ‡ เชธเชฎเชพเชจ เช•เชนเซ€ เชถเช•เชพเชฏ. เชจเชฟเชฏเชฎ เชฒเช–เชคเซ€ เชตเช–เชคเซ‡, เชคเชฎเซ‡ เช…เชจเซเชฏ เชชเซเชฐเชถเซเชจเซ‹เชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‹ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฆเชฐเซ‡เช• เชตเช–เชคเซ‡ เช•เซ‹เชกเชฎเชพเช‚ เชคเชฎเชพเชฎ เชฎเซ‡เชฅเชก เช•เซ‰เชฒเซเชธ เชถเซ‹เชงเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€, เชซเช•เซเชค เช‡เชšเซเช›เชฟเชค เชจเชฟเชฏเชฎ เชชเชฐ เช•เซ‰เชฒ เช•เชฐเซ‹:

// ะŸะพะปัƒั‡ะฐะตะผ ั€ะตะทัƒะปัŒั‚ะฐั‚ ะฒั‹ะฟะพะปะฝะตะฝะธั ะดั€ัƒะณะพะณะพ ะฟั€ะฐะฒะธะปะฐ
CxList methods = Find_Methods();

// ะ˜ั‰ะตะผ ะฒะฝัƒั‚ั€ะธ ะผะตั‚ะพะด foo. 
// ะ’ั‚ะพั€ะพะน ะฟะฐั€ะฐะผะตั‚ั€ false ะพะทะฝะฐั‡ะฐะตั‚, ั‡ั‚ะพ ะธั‰ะตะผ ะฑะตะท ั‡ัƒะฒัั‚ะฒะธั‚ะตะปัŒะฝะพัั‚ะธ ะบ ั€ะตะณะธัั‚ั€ัƒ
result = methods.FindByShortName("foo", false);

เช† เช…เชญเชฟเช—เชฎ เชคเชฎเชจเซ‡ เช•เซ‹เชกเชจเซ‡ เชŸเซ‚เช‚เช•เซ‹ เช•เชฐเชตเชพ เช…เชจเซ‡ เชจเชฟเชฏเชฎ เช…เชฎเชฒเซ€เช•เชฐเชฃ เชธเชฎเชฏเชจเซ‡ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เช˜เชŸเชพเชกเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เชธเชฎเชธเซเชฏเชพเช“เชจเซเช‚ เชจเชฟเชฐเชพเช•เชฐเชฃ

เชฒเซ‹เช—เซ€เช‚เช—

เชธเชพเชงเชจ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เช‡เชšเซเช›เชฟเชค เช•เซเชตเซ‡เชฐเซ€ เชคเชฐเชค เชœ เชฒเช–เชตเชพเชจเซเช‚ เชถเช•เซเชฏ เชจเชฅเซ€ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ‡ เชตเชฟเชตเชฟเชง เชตเชฟเช•เชฒเซเชชเซ‹ เช…เชœเชฎเชพเชตเซ€เชจเซ‡ เชชเซเชฐเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชชเชกเชถเซ‡. เช†เชตเชพ เช•เซ‡เชธ เชฎเชพเชŸเซ‡, เชธเชพเชงเชจ เชฒเซ‹เช—เซ€เช‚เช— เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡เชจเซ‡ เชจเซ€เชšเซ‡ เชชเซเชฐเชฎเชพเชฃเซ‡ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

// ะะฐั…ะพะดะธะผ ั‡ั‚ะพ-ั‚ะพ
CxList toLog = All.FindByShortName("log");

// ะคะพั€ะผะธั€ัƒะตะผ ัั‚ั€ะพะบัƒ ะธ ะพั‚ะฟั€ะฐะฒะปัะตะผ ะฒ ะปะพะณ
cxLog.WriteDebugMessage (โ€œnumber of DOM elements =โ€ + All.Count);

เชชเชฐเช‚เชคเซ เชคเซ‡ เชฏเชพเชฆ เชฐเชพเช–เชตเซเช‚ เชฏเซ‹เช—เซเชฏ เช›เซ‡ เช•เซ‡ เช† เชชเชฆเซเชงเชคเชฟ เชซเช•เซเชค เช‡เชจเชชเซเชŸ เชคเชฐเซ€เช•เซ‡ เชธเซเชตเซ€เช•เชพเชฐเซ‡ เช›เซ‡ เชคเชพเชฐ, เชคเซ‡เชฅเซ€ เชชเซเชฐเชฅเชฎ เช“เชชเชฐเซ‡เชถเชจเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‡ เชฎเชณเซ‡เชฒเชพ เชคเชคเซเชตเซ‹เชจเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซ‚เชšเชฟ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเซ€ เชถเช•เซเชฏ เชฌเชจเชถเซ‡ เชจเชนเซ€เช‚. เชฌเซ€เชœเซ‹ เชตเชฟเช•เชฒเซเชช, เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชกเชฟเชฌเช—เซ€เช‚เช— เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡, เชคเซ‡ เชธเชฎเชฏ เชธเชฎเชฏ เชชเชฐ เชœเชพเชฆเซเชˆ เชšเชฒเชจเซ‡ เชธเซ‹เช‚เชชเชตเชพเชจเซ‹ เช›เซ‡. result เช•เซเชตเซ‡เชฐเซ€เชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เช…เชจเซ‡ เชœเซเช“ เชถเซเช‚ เชฅเชพเชฏ เช›เซ‡. เช† เช…เชญเชฟเช—เชฎ เช–เซ‚เชฌ เช…เชจเซเช•เซ‚เชณ เชจเชฅเซ€; เชคเชฎเชพเชฐเซ‡ เช–เชพเชคเชฐเซ€ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช•เซ‡ เช•เซ‹เชกเชฎเชพเช‚ เช†เชจเซ€ เชธเชพเชฅเซ‡ เช•เซ‹เชˆ เช“เชตเชฐเชฐเชพเช‡เชก เช…เชฅเชตเชพ เช‘เชชเชฐเซ‡เชถเชจ เชจเชฅเซ€ result เช…เชฅเชตเชพ เชซเช•เซเชค เชจเซ€เชšเซ‡เชจเชพ เช•เซ‹เชก เชชเชฐ เชŸเชฟเชชเซเชชเชฃเซ€ เช•เชฐเซ‹. เช…เชฅเชตเชพ เชคเชฎเซ‡, เชฎเชพเชฐเซ€ เชœเซ‡เชฎ, เชคเซˆเชฏเชพเชฐ เชจเชฟเชฏเชฎเชฎเชพเช‚เชฅเซ€ เช†เชตเชพ เช˜เชฃเชพ เช•เซ‰เชฒเซเชธเชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชจเซเช‚ เชญเซ‚เชฒเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เช†เชถเซเชšเชฐเซเชฏ เชชเชพเชฎเซ€ เชถเช•เซ‹ เช›เซ‹ เช•เซ‡ เชถเชพ เชฎเชพเชŸเซ‡ เช•เช‚เชˆ เช•เชพเชฎ เช•เชฐเชคเซเช‚ เชจเชฅเซ€.

เชชเชฆเซเชงเชคเชฟเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเชตเชพเชจเซ‹ เชตเชงเซ เช…เชจเซเช•เซ‚เชณ เชฐเชธเซเชคเซ‹ เช›เซ‡ return เชœเชฐเซ‚เชฐเซ€ เชชเชฐเชฟเชฎเชพเชฃ เชธเชพเชฅเซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชจเชฟเชฏเชฎเชจเซ‹ เช…เชฎเชฒ เชธเชฎเชพเชชเซเชค เชฅเชถเซ‡ เช…เชจเซ‡ เช…เชฎเซ‡ เชœเซ‡ เชฒเช–เซเชฏเซเช‚ เช›เซ‡ เชคเซ‡เชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‡ เชถเซเช‚ เชฅเชฏเซเช‚ เชคเซ‡ เช…เชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ€เชถเซเช‚:

// ะะฐั…ะพะดะธะผ ั‡ั‚ะพ-ั‚ะพ
CxList toLog = All.FindByShortName("log");

// ะ’ั‹ะฒะพะดะธะผ ั€ะตะทัƒะปัŒั‚ะฐั‚ ะฒั‹ะฟะพะปะฝะตะฝะธั
return toLog

//ะ’ัะต, ั‡ั‚ะพ ะฝะฐะฟะธัะฐะฝะพ ะดะฐะปัŒัˆะต ะฝะต ะฑัƒะดะตั‚ ะฒั‹ะฟะพะปะฝะตะฝะพ
result = All.DataInfluencedBy(toLog)

เชฒเซ‰เช—เชฟเชจ เชธเชฎเชธเซเชฏเชพ

เชเชตเซ€ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ CxAudit เชธเชพเชงเชจเชจเซ‡ เชเช•เซเชธเซ‡เชธ เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€ (เชœเซ‡ เชจเชฟเชฏเชฎเซ‹ เชฒเช–เชตเชพ เชฎเชพเชŸเซ‡ เชตเชชเชฐเชพเชฏ เช›เซ‡). เช†เชจเชพ เชฎเชพเชŸเซ‡ เช˜เชฃเชพ เช•เชพเชฐเชฃเซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เช•เซเชฐเซ‡เชถ, เช…เชšเชพเชจเช• เชตเชฟเชจเซเชกเซ‹เช เช…เชชเชกเซ‡เชŸเซเชธ, BSOD เช…เชจเซ‡ เช…เชจเซเชฏ เช…เชฃเชงเชพเชฐเซเชฏเชพ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡ เชœเซ‡ เช…เชฎเชพเชฐเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃเชจเซ€ เชฌเชนเชพเชฐ เช›เซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เช…เชงเซ‚เชฐเซเช‚ เชธเชคเซเชฐ เชนเซ‹เชฏ เช›เซ‡, เชœเซ‡ เชคเชฎเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฒเซ‹เช— เช‡เชจ เช•เชฐเชคเชพ เช…เชŸเช•เชพเชตเซ‡ เช›เซ‡. เชคเซ‡เชจเซ‡ เช เซ€เช• เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เช˜เชฃเซ€ เช•เซเชตเซ‡เชฐเซ€ เชšเชฒเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

8.6 เชชเชนเซ‡เชฒเชพ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡:

// ะŸั€ะพะฒะตั€ัะตะผ, ั‡ั‚ะพ ะตัั‚ัŒ ะทะฐะปะพะณะธะฝะตะฝั‹ะต ะฟะพะปัŒะทะพะฒะฐั‚ะตะปะธ, ะฒั‹ะฟะพะปะฝะธะฒ ะทะฐะฟั€ะพั ะฒ ะ‘ะ”
SELECT COUNT(*) FROM [CxDB].[dbo].LoggedinUser WHERE [ClientType] = 6;
 
// ะ•ัะปะธ ั‡ั‚ะพ-ั‚ะพ ะตัั‚ัŒ, ะฐ ะฝะฐ ัะฐะผะพะผ ะดะตะปะต ะดะฐะถะต ะตัะปะธ ะธ ะฝะตั‚, ะฟะพะฟั€ะพะฑะพะฒะฐั‚ัŒ ะฒั‹ะฟะพะปะฝะธั‚ัŒ ะทะฐะฟั€ะพั
DELETE FROM [CxDB].[dbo].LoggedinUser WHERE [ClientType] = 6;

8.6 เชชเช›เซ€ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡:

// ะŸั€ะพะฒะตั€ัะตะผ, ั‡ั‚ะพ ะตัั‚ัŒ ะทะฐะปะพะณะธะฝะตะฝั‹ะต ะฟะพะปัŒะทะพะฒะฐั‚ะตะปะธ, ะฒั‹ะฟะพะปะฝะธะฒ ะทะฐะฟั€ะพั ะฒ ะ‘ะ”
SELECT COUNT(*) FROM LoggedinUser WHERE (ClientType = 'Audit');
 
// ะ•ัะปะธ ั‡ั‚ะพ-ั‚ะพ ะตัั‚ัŒ, ะฐ ะฝะฐ ัะฐะผะพะผ ะดะตะปะต ะดะฐะถะต ะตัะปะธ ะธ ะฝะตั‚, ะฟะพะฟั€ะพะฑะพะฒะฐั‚ัŒ ะฒั‹ะฟะพะปะฝะธั‚ัŒ ะทะฐะฟั€ะพั
DELETE FROM [CxDB].[dbo].LoggedinUser WHERE (ClientType = 'Audit');

เชฒเซ‡เช–เชจ เชจเชฟเชฏเชฎเซ‹

เชนเชตเซ‡ เช†เชชเชฃเซ‡ เชธเซŒเชฅเซ€ เชฐเชธเชชเซเชฐเชฆ เชญเชพเช— เชชเชฐ เชชเชนเซ‹เช‚เชšเซ€เช เช›เซ€เช. เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ CxQL เชฎเชพเช‚ เชจเชฟเชฏเชฎเซ‹ เชฒเช–เชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‹ เช›เซ‹, เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชœเซ‡ เช˜เชฃเซ€ เชตเช–เชค เช…เชญเชพเชต เชนเซ‹เชฏ เช›เซ‡ เชคเซ‡ เช…เชฎเซเช• เชธเชฎเชธเซเชฏเชพเช“ เช‰เช•เซ‡เชฒเชตเชพ เช…เชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช•เซเชตเซ‡เชฐเซ€ เช‘เชชเชฐเซ‡เชถเชจเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชตเชพเชจเชพ เช•เซ‡เชŸเชฒเชพเช• เชœเซ€เชตเช‚เชค เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชœเซ‡เชŸเชฒเชพ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชจเชฅเซ€.

เชนเซเช‚ เชœเซ‡เช“ เช•เซเชตเซ‡เชฐเซ€ เชญเชพเชทเชพเชฎเชพเช‚ เชกเซ‚เชฌเช•เซ€ เชฎเชพเชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡ เชœเซ€เชตเชจ เชฅเซ‹เชกเซเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เชถ เช…เชจเซ‡ เช…เชฎเซเช• เชธเชฎเชธเซเชฏเชพเช“ เช‰เช•เซ‡เชฒเชตเชพ เชฎเชพเชŸเซ‡ เช•เชธเซเชŸเชฎ เช•เซเชตเซ‡เชฐเซ€เชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเชพ เช˜เชฃเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เช†เชชเซ€เชถ. เชคเซ‡เชฎเชพเช‚เชจเชพ เช•เซ‡เชŸเชฒเชพเช• เชคเชฆเซเชฆเชจ เชธเชพเชฎเชพเชจเซเชฏ เช›เซ‡ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ€ เช•เช‚เชชเชจเซ€เชฎเชพเช‚ เชตเซเชฏเชตเชนเชพเชฐเชฟเช• เชฐเซ€เชคเซ‡ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชตเชฟเชจเชพ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡, เช…เชจเซเชฏ เชตเชงเซ เชšเซ‹เช•เซเช•เชธ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ€ เชตเชฟเชถเชฟเชทเซเชŸเชคเชพเช“เชจเซ‡ เช…เชจเซเชฐเซ‚เชช เช•เซ‹เชก เชฌเชฆเชฒเซ€เชจเซ‡ เชชเชฃ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชคเซ‡เชฅเซ€, เช…เชนเซ€เช‚ เชเชตเซ€ เชธเชฎเชธเซเชฏเชพเช“ เช›เซ‡ เชœเซ‡เชจเซ‹ เช†เชชเชฃเซ‡ เชตเชพเชฐเช‚เชตเชพเชฐ เชธเชพเชฎเชจเซ‹ เช•เชฐเซ€เช เช›เซ€เช:

เชเช• เช•เชพเชฐเซเชฏ: เชจเชฟเชฏเชฎเชจเชพ เช…เชฎเชฒเซ€เช•เชฐเชฃเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชฎเชพเช‚ เช˜เชฃเชพ เชชเซเชฐเชตเชพเชนเซ‹ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชเช• เชฌเซ€เชœเชพเชจเซเช‚ เชฎเชพเชณเช–เซเช‚ เช›เซ‡, เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชเช• เช›เซ‹เชกเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡.

เช‰เช•เซ‡เชฒ: เช–เชฐเซ‡เช–เชฐ, เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เช•เซ‡เชŸเชฒเชพเช• เชกเซ‡เชŸเชพ เชซเซเชฒเซ‹ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡ เชœเซ‡ เช“เชตเชฐเชฒเซ‡เชช เชฅเชˆ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เช…เชจเซเชฏเชจเซเช‚ เชŸเซ‚เช‚เช•เซเช‚ เชธเช‚เชธเซเช•เชฐเชฃ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เช†เชตเชพ เช•เชฟเชธเซเชธเชพเช“ เชฎเชพเชŸเซ‡ เชเช• เช–เชพเชธ เชชเชฆเซเชงเชคเชฟ เช›เซ‡ เชฐเชฟเชกเซเชฏเซเชธเชซเซเชฒเซ‹. เชชเชฐเชฟเชฎเชพเชฃ เชชเชฐ เช†เชงเชพเชฐ เชฐเชพเช–เซ€เชจเซ‡, เชคเซ‡ เชธเซŒเชฅเซ€ เชŸเซ‚เช‚เช•เซ‹ เช…เชฅเชตเชพ เชธเซŒเชฅเซ€ เชฒเชพเช‚เชฌเซ‹ เชชเซเชฐเชตเชพเชน เชชเชธเช‚เชฆ เช•เชฐเชถเซ‡:

// ะžัั‚ะฐะฒะธั‚ัŒ ั‚ะพะปัŒะบะพ ะดะปะธะฝะฝั‹ะต Flow
result = result.ReduceFlow(CxList.ReduceFlowType.ReduceSmallFlow);

// ะžัั‚ะฐะฒะธั‚ัŒ ั‚ะพะปัŒะบะพ ะบะพั€ะพั‚ะบะธะต Flow
result = result.ReduceFlow(CxList.ReduceFlowType.ReduceBigFlow);

เชเช• เช•เชพเชฐเซเชฏ: เชธเช‚เชตเซ‡เชฆเชจเชถเซ€เชฒ เชกเซ‡เชŸเชพเชจเซ€ เชธเซ‚เชšเชฟเชจเซ‡ เชตเชฟเชธเซเชคเซƒเชค เช•เชฐเซ‹ เช•เซ‡ เชœเซ‡เชจเชพ เชชเชฐ เชธเชพเชงเชจ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เช†เชชเซ‡ เช›เซ‡

เช‰เช•เซ‡เชฒ: เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธเชฎเชพเช‚ เชฎเซ‚เชณเชญเซ‚เชค เชจเชฟเชฏเชฎเซ‹ เช›เซ‡, เชœเซ‡เชจเชพเช‚ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เช…เชจเซเชฏ เช˜เชฃเซ€ เช•เซเชตเซ‡เชฐเซ€ เชฆเซเชตเชพเชฐเชพ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชฏ เช›เซ‡. เช†เชฎเชพเช‚เชจเชพ เช•เซ‡เชŸเชฒเชพเช• เชจเชฟเชฏเชฎเซ‹เชจเซ‡ เชคเชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชตเชฟเชถเชฟเชทเซเชŸ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เชชเซ‚เชฐเช• เชฌเชจเชพเชตเซ€เชจเซ‡, เชคเชฎเซ‡ เชคเชฎเชพเชฐเชพ เชธเซเช•เซ‡เชจ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‡ เชคเชฐเชค เชœ เชธเซเชงเชพเชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เชคเชฎเชจเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชจเซ€เชšเซ‡ เชเช• เช‰เชฆเชพเชนเชฐเชฃ เชจเชฟเชฏเชฎ เช›เซ‡:

เชธเชพเชฎเชพเชจเซเชฏ_เช—เซ‹เชชเชจเซ€เชฏเชคเชพ_เช‰เชฒเซเชฒเช‚เช˜เชจ_เชธเซ‚เชšเชฟ

เชšเชพเชฒเซ‹ เชธเช‚เชตเซ‡เชฆเชจเชถเซ€เชฒ เชฎเชพเชนเชฟเชคเซ€ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เช•เซ‡เชŸเชฒเชพเช• เชšเชฒเซ‹ เช‰เชฎเซ‡เชฐเซ€เช:

// ะŸะพะปัƒั‡ะฐะตะผ ั€ะตะทัƒะปัŒั‚ะฐั‚ ะฒั‹ะฟะพะปะฝะตะฝะธั ะฑะฐะทะพะฒะพะณะพ ะฟั€ะฐะฒะธะปะฐ
result = base.General_privacy_violation_list();

// ะ˜ั‰ะตะผ ัะปะตะผะตะฝั‚ั‹, ะบะพั‚ะพั€ั‹ะต ะฟะพะฟะฐะดะฐัŽั‚ ะฟะพะด ะฟั€ะพัั‚ั‹ะต ั€ะตะณัƒะปัั€ะฝั‹ะต ะฒั‹ั€ะฐะถะตะฝะธั. ะœะพะถะฝะพ ะดะพะฟะพะปะฝะธั‚ัŒ ั…ะฐั€ะฐะบั‚ะตั€ะฝั‹ะผะธ ะดะปั ะฒะฐั ะฟะฐั‚ั‚ะตั€ะฝะฐะผะธ.
CxList personalList = All.FindByShortNames(new List<string> {
	"*securityToken*", "*sessionId*"}, false);

// ะ”ะพะฑะฐะฒะปัะตะผ ะบ ะบะพะฝะตั‡ะฝะพะผัƒ ั€ะตะทัƒะปัŒั‚ะฐั‚ัƒ
result.Add(personalList);

เชเช• เช•เชพเชฐเซเชฏ: เชชเชพเชธเชตเชฐเซเชกเซเชธ เชธเชพเชฅเซ‡ เชšเชฒเซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชตเชฟเชธเซเชคเซƒเชค เช•เชฐเซ‹

เช‰เช•เซ‡เชฒ: เชนเซเช‚ เช•เซ‹เชกเชฎเชพเช‚ เชชเชพเชธเชตเชฐเซเชกเชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชฎเซ‚เชณเชญเซ‚เชค เชจเชฟเชฏเชฎ เชชเชฐ เชคเชฐเชค เชœ เชงเซเชฏเชพเชจ เช†เชชเชตเชพเชจเซ€ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ€ เช•เช‚เชชเชจเซ€เชฎเชพเช‚ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชšเชฒ เชจเชพเชฎเซ‹เชจเซ€ เชธเซ‚เชšเชฟ เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซ€เชถ.

Password_privacy_violation_list

CxList allStrings = All.FindByType("String"); 
allStrings.Add(All.FindByType(typeof(StringLiteral))); 
allStrings.Add(Find_UnknownReference());
allStrings.Add(All.FindByType(typeof (Declarator)));
allStrings.Add(All.FindByType(typeof (MemberAccess)));
allStrings.Add(All.FindByType(typeof(EnumMemberDecl))); 
allStrings.Add(Find_Methods().FindByShortName("get*"));

// ะ”ะพะฟะพะปะฝัะตะผ ะดะตั„ะพะปั‚ะฝั‹ะน ัะฟะธัะพะบ ะฟะตั€ะตะผะตะฝะฝั‹ั…
List < string > pswdIncludeList = new List<string>{"*password*", "*psw", "psw*", "pwd*", "*pwd", "*authKey*", "pass*", "cipher*", "*cipher", "pass", "adgangskode", "benutzerkennwort", "chiffre", "clave", "codewort", "contrasena", "contrasenya", "geheimcode", "geslo", "heslo", "jelszo", "kennwort", "losenord", "losung", "losungswort", "lozinka", "modpas", "motdepasse", "parol", "parola", "parole", "pasahitza", "pasfhocal", "passe", "passord", "passwort", "pasvorto", "paswoord", "salasana", "schluessel", "schluesselwort", "senha", "sifre", "wachtwoord", "wagwoord", "watchword", "zugangswort", "PAROLACHIAVE", "PAROLA CHIAVE", "PAROLECHIAVI", "PAROLE CHIAVI", "paroladordine", "verschluesselt", "sisma",
                "pincode",
								"pin"};
								
List < string > pswdExcludeList = new List<string>{"*pass", "*passable*", "*passage*", "*passenger*", "*passer*", "*passing*", "*passion*", "*passive*", "*passover*", "*passport*", "*passed*", "*compass*", "*bypass*", "pass-through", "passthru", "passthrough", "passbytes", "passcount", "passratio"};

CxList tempResult = allStrings.FindByShortNames(pswdIncludeList, false);
CxList toRemove = tempResult.FindByShortNames(pswdExcludeList, false);
tempResult -= toRemove;
tempResult.Add(allStrings.FindByShortName("pass", false));

foreach (CxList r in tempResult)
{
	CSharpGraph g = r.data.GetByIndex(0) as CSharpGraph;
	if(g != null && g.ShortName != null && g.ShortName.Length < 50)
	{
		result.Add(r);
	}
}

เชเช• เช•เชพเชฐเซเชฏ: เชตเชชเชฐเชพเชฏเซ‡เชฒ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• เช‰เชฎเซ‡เชฐเซ‹ เช•เซ‡ เชœเซ‡ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฆเซเชตเชพเชฐเชพ เชธเชฎเชฐเซเชฅเชฟเชค เชจเชฅเซ€

เช‰เช•เซ‡เชฒ: เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธเชฎเชพเช‚ เชคเชฎเชพเชฎ เชชเซเชฐเชถเซเชจเซ‹ เชญเชพเชทเชพ เชฆเซเชตเชพเชฐเชพ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซ‡เชฅเซ€ เชคเชฎเชพเชฐเซ‡ เชฆเชฐเซ‡เช• เชญเชพเชทเชพ เชฎเชพเชŸเซ‡ เชจเชฟเชฏเชฎเซ‹ เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชจเซ€เชšเซ‡ เช†เชตเชพ เชจเชฟเชฏเชฎเซ‹เชจเชพ เช•เซ‡เชŸเชฒเชพเช• เช‰เชฆเชพเชนเชฐเชฃเซ‹ เช›เซ‡.

เชœเซ‹ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพเชจเซ‡ เชชเซ‚เชฐเช• เช…เชฅเชตเชพ เชฌเชฆเชฒเชคเซ‹ เชนเซ‹เชฏ, เชคเซ‹ เชคเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เชฎเซ‚เชณเชญเซ‚เชค เชจเชฟเชฏเชฎเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชชเช›เซ€ เชฆเชฐเซ‡เช• เชตเซเชฏเช•เซเชคเชฟ เชœเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชคเชฐเชค เชœ เชจเชตเชพ เชชเชฐเชฟเชšเชฏ เชตเชฟเชถเซ‡ เชถเซ€เช–เซ€ เชœเชถเซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชเชจเซเชกเซเชฐเซ‹เช‡เชกเชฎเชพเช‚ เชฒเซ‹เช—เซ€เช‚เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“ เชŸเชฟเชฎเซเชฌเชฐ เช…เชจเซ‡ เชฒเซ‹เช—เซ€ เช›เซ‡. เชฎเซ‚เชณเชญเซ‚เชค เชชเซ‡เช•เซ‡เชœเชฎเชพเช‚, เชฌเชฟเชจ-เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒเซเชธเชจเซ‡ เช“เชณเช–เชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆ เชจเชฟเชฏเชฎเซ‹ เชจเชฅเซ€, เชคเซ‡เชฅเซ€ เชœเซ‹ เช•เซ‹เชˆ เชชเชพเชธเชตเชฐเซเชก เช…เชฅเชตเชพ เชธเชคเซเชฐ เช“เชณเช–เช•เชฐเซเชคเชพ เชฒเซ‹เช—เชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชคเซ‹ เช…เชฎเชจเซ‡ เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชœเชพเชฃ เชฅเชถเซ‡ เชจเชนเซ€เช‚. เชšเชพเชฒเซ‹ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธเชจเชพ เชจเชฟเชฏเชฎเซ‹เชฎเชพเช‚ เช†เชตเซ€ เชชเชฆเซเชงเชคเชฟเช“เชจเซ€ เชตเซเชฏเชพเช–เซเชฏเชพ เช‰เชฎเซ‡เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช.

เชŸเซ‡เชธเซเชŸ เช•เซ‹เชก เช‰เชฆเชพเชนเชฐเชฃ เช•เซ‡ เชœเซ‡ เชฒเซ‹เช—เซ€เช‚เช— เชฎเชพเชŸเซ‡ เชŸเชฟเชฎเซเชฌเชฐ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡:

package com.death.timberdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import timber.log.Timber;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Timber.e("Error Message");
        Timber.d("Debug Message");

        Timber.tag("Some Different tag").e("And error message");
    }
}

เช…เชจเซ‡ เช…เชนเซ€เช‚ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡เชจเซ€ เชตเชฟเชจเช‚เชคเซ€เชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡, เชœเซ‡ เชคเชฎเชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชฎเชพเชŸเซ‡ เชเช•เซเชเชฟเชŸ เชชเซ‹เชˆเชจเซเชŸ เชคเชฐเซ€เช•เซ‡ เชŸเชฟเชฎเซเชฌเชฐ เชชเชฆเซเชงเชคเชฟเช“เชจเซ‡ เช•เซ‰เชฒ เช•เชฐเชตเชพเชจเซ€ เชตเซเชฏเชพเช–เซเชฏเชพ เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเชถเซ‡:

เชเชจเซเชกเซเชฐเซ‹เช‡เชก เช†เช‰เชŸเชชเซเชŸ เชถเซ‹เชงเซ‹

// ะŸะพะปัƒั‡ะฐะตะผ ั€ะตะทัƒะปัŒั‚ะฐั‚ ะฒั‹ะฟะพะปะฝะตะฝะธั ะฑะฐะทะพะฒะพะณะพ ะฟั€ะฐะฒะธะปะฐ
result = base.Find_Android_Outputs();

// ะ”ะพะฟะพะปะฝัะตะผ ะฒั‹ะทะพะฒะฐะผะธ, ะบะพั‚ะพั€ั‹ะต ะฟั€ะธั…ะพะดัั‚ ะธะท ะฑะธะฑะปะธะพั‚ะตะบะธ Timber
CxList timber = All.FindByExactMemberAccess("Timber.*") +
    All.FindByShortName("Timber").GetMembersOfTarget();

// ะ”ะพะฑะฐะฒะปัะตะผ ะบ ะบะพะฝะตั‡ะฝะพะผัƒ ั€ะตะทัƒะปัŒั‚ะฐั‚ัƒ
result.Add(timber);

เช…เชจเซ‡ เชคเชฎเซ‡ เชชเชกเซ‹เชถเซ€ เชจเชฟเชฏเชฎเชฎเชพเช‚ เชชเชฃ เช‰เชฎเซ‡เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเชฐเช‚เชคเซ เช†เชจเซ‹ เชธเซ€เชงเซ‹ เชธเช‚เชฌเช‚เชง Android เชฎเชพเช‚ เชฒเซ‹เช—เซ€เช‚เช— เชธเชพเชฅเซ‡ เช›เซ‡:

FindAndroidLog_Outputs

// ะŸะพะปัƒั‡ะฐะตะผ ั€ะตะทัƒะปัŒั‚ะฐั‚ ะฒั‹ะฟะพะปะฝะตะฝะธั ะฑะฐะทะพะฒะพะณะพ ะฟั€ะฐะฒะธะปะฐ
result = base.Find_Android_Log_Outputs();

// ะ”ะพะฟะพะปะฝัะตะผ ะฒั‹ะทะพะฒะฐะผะธ, ะบะพั‚ะพั€ั‹ะต ะฟั€ะธั…ะพะดัั‚ ะธะท ะฑะธะฑะปะธะพั‚ะตะบะธ Timber
result.Add(
  All.FindByExactMemberAccess("Timber.*") +
  All.FindByShortName("Timber").GetMembersOfTarget()
);

เช‰เชชเชฐเชพเช‚เชค, เชœเซ‹ เชเชจเซเชกเซเชฐเซ‹เช‡เชก เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡ เชตเชฐเซเช• เชฎเซ‡เชจเซ‡เชœเชฐ เช…เชธเซเชฎเซ‡เชณ เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡, เช•เชพเชฐเซเชฏเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชชเชฆเซเชงเชคเชฟ เช‰เชฎเซ‡เชฐเซ€เชจเซ‡ เช† เชตเชฟเชถเซ‡ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธเชจเซ‡ เชตเชงเซเชฎเชพเช‚ เชœเชพเชฃ เช•เชฐเชตเซ€ เช เชธเชพเชฐเซ‹ เชตเชฟเชšเชพเชฐ เช›เซ‡. getInputData:

FindAndroidRead

// ะŸะพะปัƒั‡ะฐะตะผ ั€ะตะทัƒะปัŒั‚ะฐั‚ ะฒั‹ะฟะพะปะฝะตะฝะธั ะฑะฐะทะพะฒะพะณะพ ะฟั€ะฐะฒะธะปะฐ
result = base.Find_Android_Read();

// ะ”ะพะฟะพะปะฝัะตะผ ะฒั‹ะทะพะฒะพะผ ั„ัƒะฝะบั†ะธะธ getInputData, ะบะพั‚ะพั€ะฐั ะธัะฟะพะปัŒะทัƒะตั‚ัั ะฒ WorkManager
CxList getInputData = All.FindByShortName("getInputData");

// ะ”ะพะฑะฐะฒะปัะตะผ ะบ ะบะพะฝะตั‡ะฝะพะผัƒ ั€ะตะทัƒะปัŒั‚ะฐั‚ัƒ
result.Add(getInputData.GetMembersOfTarget());

เชเช• เช•เชพเชฐเซเชฏ: iOS เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธ เชฎเชพเชŸเซ‡ plist เชฎเชพเช‚ เชธเช‚เชตเซ‡เชฆเชจเชถเซ€เชฒ เชกเซ‡เชŸเชพ เชถเซ‹เชงเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

เช‰เช•เซ‡เชฒ: iOS เช˜เชฃเซ€เชตเชพเชฐ เชตเชฟเชตเชฟเชง เชตเซ‡เชฐเชฟเชฏเซ‡เชฌเชฒเซเชธ เช…เชจเซ‡ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชธเซเชŸเซ‹เชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ .plist เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เชธเชพเชฅเซ‡ เช–เชพเชธ เชซเชพเช‡เชฒเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เช† เชซเชพเช‡เชฒเซ‹เชฎเชพเช‚ เชชเชพเชธเชตเชฐเซเชกเซเชธ, เชŸเซ‹เช•เชจเซเชธ, เช•เซ€เช เช…เชจเซ‡ เช…เชจเซเชฏ เชธเช‚เชตเซ‡เชฆเชจเชถเซ€เชฒ เชกเซ‡เชŸเชพ เชธเซเชŸเซ‹เชฐ เช•เชฐเชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชคเซ€ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เช•เซ‹เชˆเชชเชฃ เชธเชฎเชธเซเชฏเชพ เชตเชฟเชจเชพ เช‰เชชเช•เชฐเชฃเชฎเชพเช‚เชฅเซ€ เช•เชพเชขเซ€ เชถเช•เชพเชฏ เช›เซ‡.

Plist เชซเชพเช‡เชฒเซ‹เชฎเชพเช‚ เชเชตเซ€ เชธเซเชตเชฟเชงเชพเช“ เช›เซ‡ เชœเซ‡ เชจเชฐเซ€ เช†เช‚เช–เซ‡ เชฆเซ‡เช–เชพเชคเซ€ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡. เชšเชพเชฒเซ‹ เชเช• เชจเชฟเชฏเชฎ เชฒเช–เซ€เช เชœเซ‡ เช†เชชเชฃเชจเซ‡ เชœเซ‹เชˆเชคเซ‹ เชกเซ‡เชŸเชพ เชถเซ‹เชงเชถเซ‡ เช…เชจเซ‡ เช•เซเชฏเชพเช‚เช• เชชเชพเชธเชตเชฐเซเชก เช…เชฅเชตเชพ เชŸเซ‹เช•เชจเซเชธเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡ เช…เชฎเชจเซ‡ เชœเชฃเชพเชตเชถเซ‡.

เช†เชตเซ€ เชซเชพเช‡เชฒเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ, เชœเซ‡เชฎเชพเช‚ เชฌเซ‡เช•เชเชจเซเชก เชธเซ‡เชตเชพ เชธเชพเชฅเซ‡ เชธเช‚เชšเชพเชฐ เชฎเชพเชŸเซ‡ เชŸเซ‹เช•เชจ เช›เซ‡:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>DeviceDictionary</key>
	<dict>
		<key>phone</key>
		<string>iPhone 6s</string>
	</dict>
	<key>privatekey</key>
	<string>MIICXAIBAAKBgQCqGKukO1De7zhZj6+</string>
</dict>
</plist>

เช…เชจเซ‡ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡เชจเซ‹ เชจเชฟเชฏเชฎ, เชœเซ‡เชฎเชพเช‚ เช˜เชฃเซ€ เช˜เซ‹เช‚เช˜เชพเชŸ เช›เซ‡ เชœเซ‡ เชฒเช–เชคเซ€ เชตเช–เชคเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชตเซ€ เชœเซ‹เชˆเช:

// ะ˜ัะฟะพะปัŒะทัƒะตะผ ั€ะตะทัƒะปัŒั‚ะฐั‚ ะฒั‹ะฟะพะปะฝะตะฝะธั ะฟั€ะฐะฒะธะปะฐ ะฟะพ ะฟะพะธัะบัƒ ั„ะฐะนะปะพะฒ plist, ั‡ั‚ะพะฑั‹ ัƒะผะตะฝัŒัˆะธั‚ัŒ ะฒั€ะตะผั ั€ะฐะฑะพั‚ั‹ ะฟั€ะฐะฒะธะปะฐ ะธ 
CxList plist = Find_Plist_Elements();

// ะ˜ะฝะธั†ะธะฐะปะธะทะธั€ัƒะตะผ ะฝะพะฒัƒัŽ ะฟะตั€ะตะผะตะฝะฝัƒัŽ
CxList dictionarySettings = All.NewCxList();

// ะขะตะฟะตั€ัŒ ะดะพะฑะฐะฒะธะผ ะฟะพะธัะบ ะฒัะตั… ะธะฝั‚ะตั€ะตััƒัŽั‰ะธั… ะฝะฐั ะทะฝะฐั‡ะตะฝะธะน. ะ’ ะดะฐะปัŒะฝะตะนัˆะตะผ ะผะพะถะฝะพ ั€ะฐััˆะธั€ัั‚ัŒ ัั‚ะพั‚ ัะฟะธัะพะบ.
// ะ”ะปั ะฟะพะธัะบะฐ ะทะฝะฐั‡ะตะฝะธะน, ะบะฐะบ ะฝะธ ัั‚ั€ะฐะฝะฝะพ, ะธัะฟะพะปัŒะทัƒะตั‚ัั FindByMemberAccess - ะฟะพะธัะบ ะพะฑั€ะฐั‰ะตะฝะธะน ะบ ะผะตั‚ะพะดะฐะผ. ะ’ั‚ะพั€ะพะน ะฟะฐั€ะฐะผะตั‚ั€ ะฒะฝัƒั‚ั€ะธ ั„ัƒะฝะบั†ะธะธ, false, ะพะทะฝะฐั‡ะฐะตั‚, ั‡ั‚ะพ ะฟะพะธัะบ ะฝะตั‡ัƒะฒัั‚ะฒะธั‚ะตะปะตะฝ ะบ ั€ะตะณะธัั‚ั€ัƒ
dictionarySettings.Add(plist.FindByMemberAccess("privatekey", false));
dictionarySettings.Add(plist.FindByMemberAccess("privatetoken", false));

// ะ”ะปั ะบะพั€ั€ะตะบั‚ะฝะพะณะพ ะฟะพะธัะบะฐ ะธะท-ะทะฐ ะพัะพะฑะตะฝะฝะพัั‚ะตะน ัั‚ั€ัƒะบั‚ัƒั€ั‹ plist - ะฝัƒะถะฝะพ ะธัะบะฐั‚ัŒ ะฟะพ ั‚ะธะฟัƒ "If statement"
CxList ifStatements = plist.FindByType(typeof(IfStmt));

// ะ”ะพะฑะฐะฒะปัะตะผ ะฒ ั€ะตะทัƒะปัŒั‚ะฐั‚, ะฟะตั€ะตะด ัั‚ะธะผ ะฟะพะปัƒั‡ะธะฒ ั€ะพะดะธั‚ะตะปัŒัะบะธะน ัƒะทะตะป - ะดะปั ะฟั€ะฐะฒะธะปัŒะฝะพะณะพ ะพั‚ะพะฑั€ะฐะถะตะฝะธั
result = dictionarySettings.FindByFathers(ifStatements);

เชเช• เช•เชพเชฐเซเชฏ: XML เชฎเชพเช‚ เชฎเชพเชนเชฟเชคเซ€ เชถเซ‹เชงเชตเซ€

เช‰เช•เซ‡เชฒ: เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธเชฎเชพเช‚ XML เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เช…เชจเซ‡ เชฎเซ‚เชฒเซเชฏเซ‹, เชŸเซ…เช—เซเชธ, เชตเชฟเชถเซ‡เชทเชคเชพเช“ เช…เชจเซ‡ เชตเชงเซ เชถเซ‹เชงเชตเชพ เชฎเชพเชŸเซ‡ เช–เซ‚เชฌ เชœ เช…เชจเซเช•เซ‚เชณ เช•เชพเชฐเซเชฏเซ‹ เช›เซ‡. เชชเชฐเช‚เชคเซ, เช•เชฎเชจเชธเซ€เชฌเซ‡, เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชฎเชพเช‚ เชญเซ‚เชฒ เชนเชคเซ€ เชœเซ‡เชจเชพ เช•เชพเชฐเชฃเซ‡ เชเช• เชชเชฃ เช‰เชฆเชพเชนเชฐเชฃ เช•เชพเชฎ เช•เชฐเชคเซเช‚ เชจเชฅเซ€. เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹เชจเชพ เชจเชตเซ€เชจเชคเชฎ เชธเช‚เชธเซเช•เชฐเชฃเชฎเชพเช‚ เช† เช–เชพเชฎเซ€ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเซ‹เชตเชพ เช›เชคเชพเช‚, เชœเซ‹ เชคเชฎเซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹เชจเชพ เชชเชนเซ‡เชฒเชพเชจเชพเช‚ เชธเช‚เชธเซเช•เชฐเชฃเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹ เชคเซ‹ เชธเชพเชตเชšเซ‡เชค เชฐเชนเซ‹.

เช…เชนเซ€เช‚ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชฎเชพเช‚เชฅเซ€ เชเช• เช–เซ‹เชŸเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡:

// ะšะพะด ั€ะฐะฑะพั‚ะฐั‚ัŒ ะฝะต ะฑัƒะดะตั‚
result = All.FindXmlAttributesByNameAndValue("*.app", 8, โ€œidโ€, "error- section", false, true);

เช…เชฎเชฒเชจเชพ เชชเซเชฐเชฏเชพเชธเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‡, เช…เชฎเชจเซ‡ เชเช• เชญเซ‚เชฒ เชชเซเชฐเชพเชชเซเชค เชฅเชถเซ‡ เชœเซ‡ All เช†เชตเซ€ เช•เซ‹เชˆ เชชเชฆเซเชงเชคเชฟ เชจเชฅเซ€... เช…เชจเซ‡ เช† เชธเชพเชšเซเช‚ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ XML เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เชตเชฟเชถเชฟเชทเซเชŸ, เช…เชฒเช— เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชœเช—เซเชฏเชพ เช›เซ‡ - cxXPath. Android เชฎเชพเช‚ เชธเซ‡เชŸเชฟเช‚เช— เชถเซ‹เชงเชตเชพ เชฎเชพเชŸเซ‡ เช† เชฏเซ‹เช—เซเชฏ เช•เซเชตเซ‡เชฐเซ€ เชœเซ‡เชตเซ‹ เชฆเซ‡เช–เชพเชฏ เช›เซ‡ เชœเซ‡ HTTP เชŸเซเชฐเชพเชซเชฟเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡:

// ะŸั€ะฐะฒะธะปัŒะฝั‹ะน ะฒะฐั€ะธะฐะฝั‚ ั ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะตะผ cxXPath
result = cxXPath.FindXmlAttributesByNameAndValue("*.xml", 8, "cleartextTrafficPermitted", "true", false, true);

เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ‡ เชฅเซ‹เชกเซ€ เชตเชงเซ เชตเชฟเช—เชคเชฎเชพเช‚ เชœเซ‹เชˆเช, เช•เชพเชฐเชฃ เช•เซ‡ เชคเชฎเชพเชฎ เช•เชพเชฐเซเชฏเซ‹ เชฎเชพเชŸเซ‡เชจเซเช‚ เชตเชพเช•เซเชฏเชฐเชšเชจเชพ เชธเชฎเชพเชจ เช›เซ‡, เชคเชฎเซ‡ เชเช• เชถเซ‹เชงเซ€ เช•เชพเชขเซเชฏเชพ เชชเช›เซ€, เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เชคเชฎเชจเซ‡ เชœเซ‹เชˆเชคเซ€ เชเช• เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชคเซ‡เชฅเซ€, เช•เซเชฐเชฎเชถเชƒ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เช…เชจเซเชธเชพเชฐ:

  • "*.xml"- เชถเซ‹เชงเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชซเชพเช‡เชฒเซ‹เชจเซ‹ เชฎเชพเชธเซเช•

  • 8 โ€” เชœเซ‡ เชญเชพเชทเชพ เชฎเชพเชŸเซ‡ เชจเชฟเชฏเชฎ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡ เชคเซ‡เชจเซเช‚ id

  • "cleartextTrafficPermitted"- xml เชฎเชพเช‚ เชฒเช•เซเชทเชฃ เชจเชพเชฎ

  • "true" - เช† เชฒเช•เซเชทเชฃเชจเซเช‚ เชฎเซ‚เชฒเซเชฏ

  • false - เชถเซ‹เชง เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชจเชฟเชฏเชฎเชฟเชค เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช—

  • true โ€” เชเชŸเชฒเซ‡ เช•เซ‡ เช•เซ‡เชธเชจเซ€ เช…เชตเช—เชฃเชจเชพ เช•เชฐเซ€เชจเซ‡ เชถเซ‹เชง เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เชเชŸเชฒเซ‡ เช•เซ‡ เช•เซ‡เชธ-เชธเช‚เชตเซ‡เชฆเชจเชถเซ€เชฒ

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช…เชฎเซ‡ เชเช• เชจเชฟเชฏเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เช›เซ‡ เชœเซ‡ เช–เซ‹เชŸเชพเชจเซ‡ เช“เชณเช–เซ‡ เช›เซ‡, เชธเซเชฐเช•เซเชทเชพเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€, Android เชฎเชพเช‚ เชจเซ‡เชŸเชตเชฐเซเช• เช•เชจเซ‡เช•เซเชถเชจ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เช•เซ‡ เชœเซ‡ HTTP เชชเซเชฐเซ‹เชŸเซ‹เช•เซ‹เชฒ เชฆเซเชตเชพเชฐเชพ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ‡ เชธเช‚เชšเชพเชฐ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชเช• เชตเชฟเชถเซ‡เชทเชคเชพ เชงเชฐเชพเชตเชคเซ€ เชธเซ‡เชŸเชฟเช‚เช—เชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ cleartextTrafficPermitted เช…เชฐเซเชฅ เชธเชพเชฅเซ‡ true:

<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">example.com</domain>
        <trust-anchors>
            <certificates src="@raw/my_ca"/>
        </trust-anchors>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">secure.example.com</domain>
        </domain-config>
    </domain-config>
</network-security-config>

เชเช• เช•เชพเชฐเซเชฏ: เชซเชพเช‡เชฒ เชจเชพเชฎ/เชชเชพเชฅ เชฆเซเชตเชพเชฐเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‡ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช•เชฐเซ‹

เช‰เช•เซ‡เชฒ: เชเชจเซเชกเซเชฐเซ‹เช‡เชก เชฎเชพเชŸเซ‡ เชฎเซ‹เชฌเชพเช‡เชฒ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชตเชฟเช•เชพเชธเชฅเซ€ เชธเช‚เชฌเช‚เชงเชฟเชค เชฎเซ‹เชŸเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธเชฎเชพเช‚เชจเชพ เชเช•เชฎเชพเช‚, เช…เชฎเชจเซ‡ เชจเชฟเชฏเชฎเซ‹เชจเชพ เช–เซ‹เชŸเชพ เชนเช•เชพเชฐเชพเชคเซเชฎเช•เชคเชพ เชฎเชณเซเชฏเชพ เช›เซ‡ เชœเซ‡ เช…เชธเซเชชเชทเซเชŸเชคเชพ เชธเซ‡เชŸเชฟเช‚เช—เชจเซ‡ เชจเชฟเชฐเซเชงเชพเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชนเช•เซ€เช•เชค เช เช›เซ‡ เช•เซ‡ เชจเชฟเชฏเชฎ เช†เช‰เชŸ เช“เชซ เชฌเซ‹เช•เซเชธ เชซเชพเช‡เชฒเชฎเชพเช‚ เชถเซ‹เชงเซ‡ เช›เซ‡ build.gradle เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเชพ เชชเซเชฐเช•เชพเชถเชจ เชธเช‚เชธเซเช•เชฐเชฃ เชฎเชพเชŸเซ‡ เช…เชธเซเชชเชทเซเชŸเชคเชพ เชจเชฟเชฏเชฎเซ‹ เชฒเชพเช—เซ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เชธเซ‡เชŸเชฟเช‚เช—.

เชชเชฐเช‚เชคเซ เชฎเซ‹เชŸเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เช•เซเชฏเชพเชฐเซ‡เช• เชšเชพเช‡เชฒเซเชก เชซเชพเช‡เชฒเซ‹ เชนเซ‹เชฏ เช›เซ‡ build.gradle, เชœเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชธเชฎเชพเชตเชฟเชทเซเชŸ เชชเซเชธเซเชคเช•เชพเชฒเชฏเซ‹เชจเซ‹ เชธเช‚เชฆเชฐเซเชญ เช†เชชเซ‡ เช›เซ‡. เช–เชพเชธเชฟเชฏเชค เช เช›เซ‡ เช•เซ‡ เชœเซ‹ เช† เชซเชพเช‡เชฒเซ‹ เช…เชธเซเชชเชทเซเชŸเชคเชพเชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชค เชฆเชฐเซเชถเชพเชตเชคเซ€ เชจเชฅเซ€, เชคเซ‹ เชชเชฃ เชธเช‚เช•เชฒเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชชเซ‡เชฐเซ‡เชจเซเชŸ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชซเชพเช‡เชฒเชจเซ€ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชฒเชพเช—เซ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เช†เชฎ, เช•เชพเชฐเซเชฏ เชชเซเชธเซเชคเช•เชพเชฒเชฏเซ‹เชจเซ€ เชฌเชพเชณ เชซเชพเช‡เชฒเซ‹เชฎเชพเช‚ เชŸเซเชฐเชฟเช—เชฐเซเชธเชจเซ‡ เช•เชพเชชเซ€ เชจเชพเช–เชตเชพเชจเซเช‚ เช›เซ‡. เชคเซ‡เช“ เชฐเซ‡เช–เชพเชจเซ€ เชนเชพเชœเชฐเซ€ เชฆเซเชตเชพเชฐเชพ เช“เชณเช–เซ€ เชถเช•เชพเชฏ เช›เซ‡ apply 'com.android.library'.

เชซเชพเช‡เชฒเชฎเชพเช‚เชฅเซ€ เช‰เชฆเชพเชนเชฐเชฃ เช•เซ‹เชก build.gradle, เชœเซ‡ เช…เชธเซเชชเชทเซเชŸเชคเชพเชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชค เชจเช•เซเช•เซ€ เช•เชฐเซ‡ เช›เซ‡:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"
    defaultConfig {
        ...
    }

    buildTypes {
        release {
            minifyEnabled true
            ...
        }
    }
}

dependencies {
  ...
}

เช‰เชฆเชพเชนเชฐเชฃ เชซเชพเช‡เชฒ build.gradle เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชธเชฎเชพเชตเชฟเชทเซเชŸ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชฎเชพเชŸเซ‡ เช•เซ‡ เชœเซ‡เชฎเชพเช‚ เช† เชธเซ‡เชŸเชฟเช‚เช— เชจเชฅเซ€:

apply plugin: 'android-library'

dependencies {
  compile 'com.android.support:support-v4:18.0.+'
}

android {
  compileSdkVersion 14
  buildToolsVersion '17.0.0'
  ...
}

เช…เชจเซ‡ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชฎเชพเชŸเซ‡เชจเซ‹ เชจเชฟเชฏเชฎ:

ProGuardObfuscationNotInUse

// ะŸะพะธัะบ ะผะตั‚ะพะดะฐ release ัั€ะตะดะธ ะฒัะตั… ะผะตั‚ะพะดะพะฒ ะฒ Gradle ั„ะฐะนะปะฐั…
CxList releaseMethod = Find_Gradle_Method("release");

// ะ’ัะต ะพะฑัŠะตะบั‚ั‹ ะธะท ั„ะฐะนะปะพะฒ build.gradle
CxList gradleBuildObjects = Find_Gradle_Build_Objects();

// ะŸะพะธัะบ ั‚ะพะณะพ, ั‡ั‚ะพ ะฝะฐั…ะพะดะธั‚ัั ะฒะฝัƒั‚ั€ะธ ะผะตั‚ะพะดะฐ "release" ัั€ะตะดะธ ะฒัะตั… ะพะฑัŠะตะบั‚ะพะฒ ะธะท ั„ะฐะนะปะพะฒ build.gradle
CxList methodInvokesUnderRelease = gradleBuildObjects.FindByType(typeof(MethodInvokeExpr)).GetByAncs(releaseMethod);

// ะ˜ั‰ะตะผ ะฒะฝัƒั‚ั€ะธ gradle-ั„ะฐะนะปะพะฒ ัั‚ั€ะพะบัƒ "com.android.library" - ัั‚ะพ ะทะฝะฐั‡ะธั‚, ั‡ั‚ะพ ะดะฐะฝะฝั‹ะน ั„ะฐะนะป ะพั‚ะฝะพัะธั‚ัั ะบ ะฑะธะฑะปะธะพั‚ะตะบะต ะธ ะตะณะพ ะฝะตะพะฑั…ะพะดะธะผะพ ะธัะบะปัŽั‡ะธั‚ัŒ ะธะท ะฟั€ะฐะฒะธะปะฐ
CxList android_library = gradleBuildObjects.FindByName("com.android.library");

// ะ˜ะฝะธั†ะธะฐะปะธะทะฐั†ะธั ะฟัƒัั‚ะพะณะพ ะผะฐััะธะฒะฐ
List<string> libraries_path = new List<string> {};

// ะŸั€ะพั…ะพะดะธะผ ั‡ะตั€ะตะท ะฒัะต ะฝะฐะนะดะตะฝะฝั‹ะต "ะดะพั‡ะตั€ะฝะธะต" ั„ะฐะนะปั‹
foreach(CxList library in android_library)
{
    // ะŸะพะปัƒั‡ะฐะตะผ ะฟัƒั‚ัŒ ะบ ะบะฐะถะดะพะผัƒ ั„ะฐะนะปัƒ
	string file_name_library = library.GetFirstGraph().LinePragma.FileName;
    
    // ะ”ะพะฑะฐะฒะปัะตะผ ะตะณะพ ะฒ ะฝะฐัˆ ะผะฐััะธะฒ
	libraries_path.Add(file_name_library);
}

// ะ˜ั‰ะตะผ ะฒัะต ะฒั‹ะทะพะฒั‹ ะฒะบะปัŽั‡ะตะฝะธั ะพะฑั„ัƒัะบะฐั†ะธะธ ะฒ ั€ะตะปะธะทะฝั‹ั… ะฝะฐัั‚ั€ะพะนะบะฐั…
CxList minifyEnabled = methodInvokesUnderRelease.FindByShortName("minifyEnabled");

// ะŸะพะปัƒั‡ะฐะตะผ ะฟะฐั€ะฐะผะตั‚ั€ั‹ ัั‚ะธั… ะฒั‹ะทะพะฒะพะฒ
CxList minifyValue = gradleBuildObjects.GetParameters(minifyEnabled, 0);

// ะ˜ั‰ะตะผ ัั€ะตะดะธ ะฝะธั… ะฒะบะปัŽั‡ะตะฝะฝั‹ะต
CxList minifyValueTrue = minifyValue.FindByShortName("true");

// ะะตะผะฝะพะณะพ ะผะฐะณะธะธ, ะตัะปะธ ะฝะต ะฝะฐัˆะปะธ ัั‚ะฐะฝะดะฐั€ั‚ะฝั‹ะผ ัะฟะพัะพะฑะพะผ :D
if (minifyValueTrue.Count == 0) {
	minifyValue = minifyValue.FindByAbstractValue(abstractValue => abstractValue is TrueAbstractValue);
} else {
    // ะ ะตัะปะธ ะฒัั‘-ั‚ะฐะบะธ ะฝะฐัˆะปะธ, ั‚ะพ ะฟั€ะตะดั‹ะดัƒั‰ะธะน ั€ะตะทัƒะปัŒั‚ะฐั‚ ะธ ะพัั‚ะฐะฒะปัะตะผ
	minifyValue = minifyValueTrue;	
}

// ะ•ัะปะธ ะฝะต ะฝะฐัˆะปะพััŒ ั‚ะฐะบะธั… ะผะตั‚ะพะดะพะฒ
if (minifyValue.Count == 0)
{
    // ะ”ะปั ะฑะพะปะตะต ะบะพั€ั€ะตะบั‚ะฝะพะณะพ ะพั‚ะพะฑั€ะฐะถะตะฝะธั ะผะตัั‚ะฐ ัั€ะฐะฑะฐั‚ั‹ะฒะฐะฝะธั ะฒ ั„ะฐะนะปะต ะธั‰ะตะผ ะธะปะธ buildTypes ะธะปะธ android
	CxList tempResult = All.NewCxList();
	CxList buildTypes = Find_Gradle_Method("buildTypes");
	if (buildTypes.Count > 0) {
		tempResult = buildTypes;
	} else {
		tempResult = Find_Gradle_Method("android");
	}
	
	// ะ”ะปั ะบะฐะถะดะพะณะพ ะธะท ะฝะฐะนะดะตะฝะฝั‹ั… ะผะตัั‚ ัั€ะฐะฑะฐั‚ั‹ะฒะฐะฝะธั ะฟั€ะพั…ะพะดะธะผ ะธ ะพะฟั€ะตะดะตะปัะตะผ, ะดะพั‡ะตั€ะฝะธะน ะธะปะธ ะพัะฝะพะฒะฝะพะน ั„ะฐะนะปั‹ ัะฑะพั€ะบะธ
	foreach(CxList res in tempResult)
	{
        // ะžะฟั€ะตะดะตะปัะตะผ, ะฒ ะบะฐะบะพะผ ั„ะฐะนะปะต ะฑั‹ะป ะฝะฐะนะดะตะฝ buildType ะธะปะธ android ะผะตั‚ะพะดั‹
		string file_name_result = res.GetFirstGraph().LinePragma.FileName;
        
        // ะ•ัะปะธ ั‚ะฐะบะพะณะพ ั„ะฐะนะปะฐ ะฝะตั‚ ะฒ ะฝะฐัˆะตะผ ัะฟะธัะบะต "ะดะพั‡ะตั€ะฝะธั…" ั„ะฐะนะปะพะฒ - ะทะฝะฐั‡ะธั‚ ัั‚ะพ ะพัะฝะพะฒะฝะพะน ั„ะฐะนะป ะธ ะตะณะพ ะผะพะถะฝะพ ะดะพะฑะฐะฒะธั‚ัŒ ะฒ ั€ะตะทัƒะปัŒั‚ะฐั‚
		if (libraries_path.Contains(file_name_result) == false){
			result.Add(res);
		}
	}
}

เช† เช…เชญเชฟเช—เชฎ เชคเชฆเซเชฆเชจ เชธเชพเชฐเซเชตเชคเซเชฐเชฟเช• เช…เชจเซ‡ เชฎเชพเชคเซเชฐ Android เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชฎเชพเชŸเซ‡ เชœ เชจเชนเซ€เช‚, เชชเชฃ เช…เชจเซเชฏ เช•เชฟเชธเซเชธเชพเช“ เชฎเชพเชŸเซ‡ เชชเชฃ เช‰เชชเชฏเซ‹เช—เซ€ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ‡ เชชเชฐเชฟเชฃเชพเชฎ เชšเซ‹เช•เซเช•เชธ เชซเชพเช‡เชฒเชจเซเช‚ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡ เชจเชฟเชฐเซเชงเชพเชฐเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ.

เชเช• เช•เชพเชฐเซเชฏ: เชœเซ‹ เชธเชฟเชจเซเชŸเซ‡เช•เซเชธ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เชธเชฎเชฐเซเชฅเชฟเชค เชจ เชนเซ‹เชฏ เชคเซ‹ เชคเซƒเชคเซ€เชฏ เชชเช•เซเชท เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชฎเชพเชŸเซ‡ เชธเชฎเชฐเซเชฅเชจ เช‰เชฎเซ‡เชฐเซ‹

เช‰เช•เซ‡เชฒ: เช•เซ‹เชก เชฒเช–เชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชตเชฟเชตเชฟเชง เชซเซเชฐเซ‡เชฎเชตเชฐเซเช•เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชซเช•เซเชค เชšเชพเชฐเซเชŸเชจเซ€ เชฌเชนเชพเชฐ เช›เซ‡. เช…เชฒเชฌเชคเซเชค, เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธ เชนเช‚เชฎเซ‡เชถเชพ เชคเซ‡เชฎเชจเชพ เช…เชธเซเชคเชฟเชคเซเชต เชตเชฟเชถเซ‡ เชœเชพเชฃเชคเชพ เชจเชฅเซ€, เช…เชจเซ‡ เช…เชฎเชพเชฐเซเช‚ เช•เชพเชฐเซเชฏ เชคเซ‡เชจเซ‡ เชคเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡ เชถเซ€เช–เชตเชตเชพเชจเซเช‚ เช›เซ‡ เช•เซ‡ เช…เชฎเซเช• เชชเชฆเซเชงเชคเชฟเช“ เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เช† เชฎเชพเชณเช–เชพ เชธเชพเชฅเซ‡ เชธเช‚เชฌเช‚เชงเชฟเชค เช›เซ‡. เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เช† เช เชนเช•เซ€เช•เชค เชฆเซเชตเชพเชฐเชพ เชœเชŸเชฟเชฒ เช›เซ‡ เช•เซ‡ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช• เชซเช‚เช•เซเชถเชจ เชจเชพเชฎเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡ เช–เซ‚เชฌ เชœ เชธเชพเชฎเชพเชจเซเชฏ เช›เซ‡ เช…เชจเซ‡ เชšเซ‹เช•เซเช•เชธ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชธเชพเชฅเซ‡เชจเชพ เชšเซ‹เช•เซเช•เชธ เช•เซ‰เชฒเชจเชพ เชธเช‚เชฌเช‚เชงเชจเซ‡ เช…เชธเซเชชเชทเซเชŸเชชเชฃเซ‡ เชจเชฟเชฐเซเชงเชพเชฐเชฟเชค เช•เชฐเชตเซเช‚ เช…เชถเช•เซเชฏ เช›เซ‡.

เชฎเซเชถเซเช•เซ‡เชฒเซ€ เช เช›เซ‡ เช•เซ‡ เช†เชตเซ€ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“เชจเซ€ เชตเชพเช•เซเชฏเชฐเชšเชจเชพ เชนเช‚เชฎเซ‡เชถเชพ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เช“เชณเช–เชพเชคเซ€ เชจเชฅเซ€ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ‡ เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เช–เซ‹เชŸเชพ เชนเช•เชพเชฐเชพเชคเซเชฎเช• เชจ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชชเชกเชถเซ‡. เชธเซเช•เซ‡เชจเชฟเช‚เช— เชธเชšเซ‹เชŸเชคเชพ เชธเซเชงเชพเชฐเชตเชพ เช…เชจเซ‡ เชธเชฎเชธเซเชฏเชพ เชนเชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช˜เชฃเชพ เชตเชฟเช•เชฒเซเชชเซ‹ เช›เซ‡:

  • เชชเซเชฐเชฅเชฎ เชตเชฟเช•เชฒเซเชช, เช…เชฎเซ‡ เช–เชพเชคเชฐเซ€เชชเซ‚เชฐเซเชตเช• เชœเชพเชฃเซ€เช เช›เซ€เช เช•เซ‡ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชšเซ‹เช•เซเช•เชธ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชฅเชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชŸเซ€เชฎ เชธเซเชคเชฐเซ‡ เชจเชฟเชฏเชฎ เชฒเชพเช—เซ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เชœเซ‹ เชŸเซ€เชฎ เชเช• เช…เชฒเช— เช…เชญเชฟเช—เชฎ เช…เชชเชจเชพเชตเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซ‡ เช›เซ‡ เช…เชฅเชตเชพ เช˜เชฃเซ€ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เชซเช‚เช•เซเชถเชจเชจเชพ เชจเชพเชฎ เช“เชตเชฐเชฒเซ‡เชช เชฅเชพเชฏ เช›เซ‡, เชคเซ‹ เช…เชฎเซ‡ เช…เชธเช‚เช–เซเชฏ เช–เซ‹เชŸเชพ เชธเช•เชพเชฐเชพเชคเซเชฎเช•เชคเชพเช“เชจเซเช‚ เช–เซ‚เชฌ เชœ เชธเซเช–เชฆ เชšเชฟเชคเซเชฐ เชฎเซ‡เชณเชตเซ€ เชถเช•เซ€เชถเซเช‚ เชจเชนเซ€เช‚.

  • เชฌเซ€เชœเซ‹ เชตเชฟเช•เชฒเซเชช เช เชซเชพเช‡เชฒเซ‹ เชถเซ‹เชงเชตเชพเชจเซ‹ เช›เซ‡ เชœเซ‡เชฎเชพเช‚ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เชธเซเชชเชทเซเชŸ เชฐเซ€เชคเซ‡ เช†เชฏเชพเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเซ‹เชฏ. เช† เช…เชญเชฟเช—เชฎ เชธเชพเชฅเซ‡, เช…เชฎเซ‡ เช–เชพเชคเชฐเซ€ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช เช•เซ‡ เช…เชฎเชจเซ‡ เชœเซ‡ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชคเซ‡ เช† เชซเชพเช‡เชฒเชฎเชพเช‚ เชฌเชฐเชพเชฌเชฐ เชตเชชเชฐเชพเชฏ เช›เซ‡.

  • เช…เชจเซ‡ เชคเซเชฐเซ€เชœเซ‹ เชตเชฟเช•เชฒเซเชช เช เช›เซ‡ เช•เซ‡ เช‰เชชเชฐเซ‹เช•เซเชค เชฌเซ‡ เช…เชญเชฟเช—เชฎเซ‹เชจเซ‹ เชเช•เชธเชพเชฅเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹.

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชšเชพเชฒเซ‹ เชธเชพเช‚เช•เชกเชพ เชตเชฐเซเชคเซเชณเซ‹เชฎเชพเช‚ เชœเชพเชฃเซ€เชคเซ€ เชชเซเชธเซเชคเช•เชพเชฒเชฏ เชœเซ‹เชˆเช เชšเชชเชณ เชธเซเช•เซ‡เชฒเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพ เชฎเชพเชŸเซ‡, เชเชŸเชฒเซ‡ เช•เซ‡ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เชถเชพเชฌเซเชฆเชฟเช• เชฎเซ‚เชฒเซเชฏเซ‹เชจเซเช‚ เชตเชฟเชญเชพเชœเชจ. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡, SQL เช•เซเชตเซ‡เชฐเซ€ เชฎเชพเชŸเซ‡ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชชเชธเชพเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เช‘เชชเชฐเซ‡เชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เช†เชตเชถเซเชฏเช• เช›เซ‡ $, เชœเซ‡ เชชเซเชฐเซ€เชซเซ‹เชฐเซเชฎเซเชก SQL เช•เซเชตเซ‡เชฐเซ€ เชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเซ‡ เชฌเชฆเชฒเซ‡ เช›เซ‡. เชเชŸเชฒเซ‡ เช•เซ‡, เชนเช•เซ€เช•เชคเชฎเชพเช‚, เชคเซ‡ เชœเชพเชตเชพเชฎเชพเช‚ เชคเซˆเชฏเชพเชฐ เชจเชฟเชตเซ‡เชฆเชจเชจเซเช‚ เชธเซ€เชงเซเช‚ เชเชจเชพเชฒเซ‹เช— เช›เซ‡. เชชเชฐเช‚เชคเซ, เชœเซ‹ เชคเชฎเชพเชฐเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชฐเซ€เชคเซ‡ SQL เช•เซเชตเซ‡เชฐเซ€ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชœเซ‹ เชคเชฎเชพเชฐเซ‡ เช•เซ‹เชทเซเชŸเช•เชจเชพ เชจเชพเชฎ เชชเชพเชธ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเซ‡ เช‘เชชเชฐเซ‡เชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. #$, เชœเซ‡ เช•เซเชตเซ‡เชฐเซ€ (เชฒเช—เชญเช— เชธเซเชŸเซเชฐเชฟเช‚เช— เชœเซ‹เชกเชพเชฃเชจเซ€ เชœเซ‡เชฎ)เชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเซ‡ เชธเซ€เชงเซ‹ เชœ เชฌเชฆเชฒเซ€ เชจเชพเช–เชถเซ‡.

เช•เซ‹เชก เช‰เชฆเชพเชนเชฐเชฃ:

// ะ’ ะพะฑั‰ะตะผ ัะปัƒั‡ะฐะต - ะทะฝะฐั‡ะตะฝะธั, ะบะพะฝั‚ั€ะพะปะธั€ัƒะตะผั‹ะต ะฟะพะปัŒะทะพะฒะฐั‚ะตะปะตะผ
val table = "coffees"
sql"select * from #$table where name = $name".as[Coffee].headOption

เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธเชจเซ‡ เชนเชœเซ เชธเซเชงเซ€ เช–เชฌเชฐ เชจเชฅเซ€ เช•เซ‡ เชธเซเชชเซเชฒเชฟเชธเชฟเช‚เช— เชฒเชฟเชŸเชฐเชฒ เชตเซ‡เชฒเซเชฏเซ เช…เชจเซ‡ เชธเซเช•เซ€เชชเซเชธ เช“เชชเชฐเซ‡เชŸเชฐเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชถเซ‹เชงเชตเซ‹ #$, เชคเซ‹ เชšเชพเชฒเซ‹ เชธเช‚เชญเชตเชฟเชค SQL เช‡เชจเซเชœเซ‡เช•เซเชถเชจเชจเซ‡ เช“เชณเช–เชตเชพ เช…เชจเซ‡ เช•เซ‹เชกเชฎเชพเช‚ เชฏเซ‹เช—เซเชฏ เชธเซเชฅเชพเชจเซ‹ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ‡ เชถเซ€เช–เชตเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช:

// ะะฐั…ะพะดะธะผ ะฒัะต ะธะผะฟะพั€ั‚ั‹
CxList imports = All.FindByType(typeof(Import));

// ะ˜ั‰ะตะผ ะฟะพ ะธะผะตะฝะธ, ะตัั‚ัŒ ะปะธ ะฒ ะธะผะฟะพั€ั‚ะฐั… slick
CxList slick = imports.FindByShortName("slick");

// ะะตะบะพั‚ะพั€ั‹ะน ั„ะปะฐะณ, ะพะฟั€ะตะดะตะปััŽั‰ะธะน, ั‡ั‚ะพ ะธะผะฟะพั€ั‚ ะฑะธะฑะปะธะพั‚ะตะบะธ ะฒ ะบะพะดะต ะฟั€ะธััƒั‚ัั‚ะฒัƒะตั‚
// ะ”ะปั ะฑะพะปะตะต ั‚ะพั‡ะฝะพะณะพ ะพะฟั€ะตะดะตะปะตะฝะธั - ะผะพะถะฝะพ ะฟั€ะธะผะตะฝะธั‚ัŒ ะฟะพะดั…ะพะด ั ะธะผะตะฝะตะผ ั„ะฐะนะปะฐ
bool not_empty_list = false;
foreach (CxList r in slick)
{
    // ะ•ัะปะธ ะฒัั‚ั€ะตั‚ะธะปะธ ะธะผะฟะพั€ั‚, ัั‡ะธั‚ะฐะตะผ, ั‡ั‚ะพ slick ะธัะฟะพะปัŒะทัƒะตั‚ัั
	not_empty_list = true;
}

if (not_empty_list) {
    // ะ˜ั‰ะตะผ ะฒั‹ะทะพะฒั‹, ะฒ ะบะพั‚ะพั€ั‹ะต ะฟะตั€ะตะดะฐะตั‚ัั SQL-ัั‚ั€ะพะบะฐ
	CxList sql = All.FindByShortName("sql");
	sql.Add(All.FindByShortName("sqlu"));
	
	// ะžะฟั€ะตะดะตะปัะตะผ ะดะฐะฝะฝั‹ะต, ะบะพั‚ะพั€ั‹ะต ะฟะพะฟะฐะดะฐัŽั‚ ะฒ ัั‚ะธ ะฒั‹ะทะพะฒั‹
	CxList data_sql = All.DataInfluencingOn(sql);
	
	// ะขะฐะบ ะบะฐะบ ัะธะฝั‚ะฐะบะธั ะฝะต ะฟะพะดะดะตั€ะถะธะฒะฐะตั‚ัั, ะผะพะถะฝะพ ะฟั€ะธะผะตะฝะธั‚ัŒ ะฟะพะดั…ะพะด ั ั€ะตะณัƒะปัั€ะฝั‹ะผะธ ะฒั‹ั€ะฐะถะตะฝะธัะผะธ
	// RegExp ัั‚ะพะธั‚ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะบั€ะฐะนะฝะต ะพัั‚ะพั€ะพะถะฝะพ ะธ ะฝะต ะฟั€ะธะผะตะฝัั‚ัŒ ะตะณะพ ะฝะฐ ะฑะพะปัŒัˆะพะผ ะบะพะปะธั‡ะตัั‚ะฒะต ะดะฐะฝะฝั‹ั…, ั‚ะฐะบ ะบะฐะบ ัั‚ะพ ะผะพะถะตั‚ ัะธะปัŒะฝะพ ะฟะพะฒะปะธัั‚ัŒ ะฝะฐ ะฟั€ะพะธะทะฒะพะดะธั‚ะตะปัŒะฝะพัั‚ัŒ
	CxList find_possible_inj = data_sql.FindByRegex(@"#$", true, true, true);

    // ะ˜ะทะฑะฐะฒะปัะตะผัั ะพั‚ ะปะธัˆะฝะธั… ัั€ะฐะฑะฐั‚ั‹ะฒะฐะฝะธะน, ะตัะปะธ ะพะฝะธ ะตัั‚ัŒ ะธ ะฒั‹ะฒะพะดะธะผ ะฒ ั€ะตะทัƒะปัŒั‚ะฐั‚
	result = find_possible_inj.FindByType(typeof(BinaryExpr));
}

เชเช• เช•เชพเชฐเซเชฏ: เช“เชชเชจ-เชธเซ‹เชฐเซเชธ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“เชฎเชพเช‚ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชจเชฌเชณเชพ เช•เชพเชฐเซเชฏเซ‹ เชฎเชพเชŸเซ‡ เชถเซ‹เชงเซ‹

เช‰เช•เซ‡เชฒ: เช˜เชฃเซ€ เช•เช‚เชชเชจเซ€เช“ เชตเชฟเช•เชธเชฟเชค เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธเชฎเชพเช‚ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“เชจเชพ เชจเชฌเชณเชพ เชตเชฐเซเชเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชถเซ‹เชงเชตเชพ เชฎเชพเชŸเซ‡ เช“เชชเชจ-เชธเซ‹เชฐเซเชธ เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— เชŸเซ‚เชฒเซเชธ (OSA เชชเซเชฐเซ‡เช•เซเชŸเชฟเชธ) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เช†เชตเซ€ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เชธเช‚เชธเซเช•เชฐเชฃเชฎเชพเช‚ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเซเช‚ เชถเช•เซเชฏ เชจเชฅเซ€. เช•เซ‡เชŸเชฒเชพเช• เช•เชฟเชธเซเชธเชพเช“เชฎเชพเช‚ เช•เชพเชฐเซเชฏเชพเชคเซเชฎเช• เชฎเชฐเซเชฏเชพเชฆเชพเช“ เช›เซ‡, เช…เชจเซเชฏเชฎเชพเช‚ เช•เซ‹เชˆ เชธเซเชฐเช•เซเชทเชฟเชค เชธเช‚เชธเซเช•เชฐเชฃ เชจเชฅเซ€. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, SAST เช…เชจเซ‡ OSA เชชเซเชฐเชฅเชพเช“เชจเซเช‚ เชธเช‚เชฏเซ‹เชœเชจ เช เชจเชฟเชฐเซเชงเชพเชฐเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเชถเซ‡ เช•เซ‡ เชœเซ‡ เช•เชพเชฐเซเชฏเซ‹ เชจเชฌเชณเชพเชˆเชจเชพ เชถเซ‹เชทเชฃ เชคเชฐเชซ เชฆเซ‹เชฐเซ€ เชœเชพเชฏ เช›เซ‡ เชคเซ‡เชจเซ‹ เช•เซ‹เชกเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช— เชฅเชคเซ‹ เชจเชฅเซ€.

เชชเชฐเช‚เชคเซ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ, เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชœเชพเชตเชพเชธเซเช•เซเชฐเชฟเชชเซเชŸเชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‡เชคเชพ, เช† เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เชคเซเชšเซเช› เช•เชพเชฐเซเชฏ เชจ เชนเซ‹เชˆ เชถเช•เซ‡. เชจเซ€เชšเซ‡ เชเช• เช‰เช•เซ‡เชฒ เช›เซ‡, เช•เชฆเชพเชš เช†เชฆเชฐเซเชถ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡เชฎ เช›เชคเชพเช‚, เช˜เชŸเช•เชฎเชพเช‚ เชจเชฌเชณเชพเชˆเช“เชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡. lodash เชชเชฆเซเชงเชคเชฟเช“เชฎเชพเช‚ template ะธ *set.

JS เชซเชพเช‡เชฒเชฎเชพเช‚ เชธเช‚เชญเชตเชฟเชค เชฐเซ‚เชชเซ‡ เชจเชฌเชณเชพ เช•เซ‹เชกเชจเชพ เชชเชฐเซ€เช•เซเชทเชฃเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹:

/**
 * Template example
 */

'use strict';
var _ = require("./node_modules/lodash.js");


// Use the "interpolate" delimiter to create a compiled template.
var compiled = _.template('hello <%= js %>!');
console.log(compiled({ 'js': 'lodash' }));
// => 'hello lodash!'

// Use the internal `print` function in "evaluate" delimiters.

var compiled = _.template('<% print("hello " + js); %>!');
console.log(compiled({ 'js': 'lodash' }));
// => 'hello lodash!'

เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชธเซ€เชงเซเช‚ html เชฎเชพเช‚ เช•เชจเซ‡เช•เซเชŸ เชฅเชพเชฏ เช›เซ‡:

<!DOCTYPE html>
<html>
<head>
    <title>Lodash Tutorial</title>
    <script src="./node_modules/lodash.js"></script>
    <script type="text/javascript">
  // Lodash chunking array
        nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];

        let c1 = _.template('<% print("hello " + js); %>!');
        console.log(c1);

        let c2 = _.template('<% print("hello " + js); %>!');
        console.log(c2);
    </script>
</head>
<body></body>
</html>

เช…เชฎเซ‡ เช…เชฎเชพเชฐเซ€ เชคเชฎเชพเชฎ เชจเชฌเชณเชพ เชชเชฆเซเชงเชคเชฟเช“ เชถเซ‹เชงเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช, เชœเซ‡ เชจเชฌเชณเชพเชˆเช“เชฎเชพเช‚ เชธเซ‚เชšเชฟเชฌเชฆเซเชง เช›เซ‡:

// ะ˜ั‰ะตะผ ะฒัะต ัั‚ั€ะพะบะธ: ะฒ ะบะพั‚ะพั€ั‹ั… ะฒัั‚ั€ะตั‡ะฐะตั‚ัั ัั‚ั€ะพะบะฐ lodash (ะฟั€ะตะดะฟะพะปะฐะณะฐะตะผ, ั‡ั‚ะพ ัั‚ะพ ะพะฑัŠัะฒะปะตะฝะธะต ะธะผะฟะพั€ั‚ะฐ ะฑะธะฑะปะธะพั‚ะตะบะธ
CxList lodash_strings = Find_String_Literal().FindByShortName("*lodash*");

// ะ˜ั‰ะตะผ ะฒัะต ะดะฐะฝะฝั‹ะต: ะบะพั‚ะพั€ั‹ะต ะฒะทะฐะธะผะพะดะตะนัั‚ะฒัƒัŽั‚ ั ัั‚ะธะผะธ ัั‚ั€ะพะบะฐะผะธ
CxList data_on_lodash = All.InfluencedBy(lodash_strings);


// ะ—ะฐะดะฐะตะผ ัะฟะธัะพะบ ัƒัะทะฒะธะผั‹ั… ะผะตั‚ะพะดะพะฒ
List<string> vulnerable_methods = new List<string> {"template", "*set"};

// ะ˜ั‰ะตะผ ะฒัะต ะฝะฐัˆะธ ัƒัะทะฒะธะผั‹ะต ะผะตั‚ะพะดั‹, ะบะพั‚ะพั€ั‹ะต ะฟะตั€ะตั‡ะธัะปะตะฝะฝั‹ ะฒ ัƒัะทะฒะธะผะพัั‚ัั… ะธ ะพั‚ั„ะธะปัŒั‚ั€ะพะฒั‹ะฒะฐะตะผ ะธั… ั‚ะพะปัŒะบะพ ั‚ะฐะผ, ะณะดะต ะพะฝะธ ะฒั‹ะทั‹ะฒะฐะปะธััŒ
CxList vulnerableMethods = All.FindByShortNames(vulnerable_methods).FindByType(typeof(MethodInvokeExpr));

//ะะฐั…ะพะดะธะผ ะฒัะต ะดะฐะฝะฝั‹ะต: ะบะพั‚ะพั€ั‹ะต ะฒะทะฐะธะผะพะดะตะนัั‚ะฒัƒัŽั‚ ั ะดะฐะฝะฝั‹ะผะธ ะผะตั‚ะพะดะฐะผะธ
CxList vulnFlow = All.InfluencedBy(vulnerableMethods);

// ะ•ัะปะธ ะตัั‚ัŒ ะฟะตั€ะตัะตั‡ะตะฝะธะต ะฟะพ ัั‚ะธะผ ะดะฐะฝะฝั‹ะผ - ะบะปะฐะดะตะผ ะฒ ั€ะตะทัƒะปัŒั‚ะฐั‚
result = vulnFlow * data_on_lodash;

// ะคะพั€ะผะธั€ัƒะตะผ ัะฟะธัะพะบ ะฟัƒั‚ะตะน ะฟะพ ะบะพั‚ะพั€ั‹ะผ ะผั‹ ัƒะถะต ะฟั€ะพัˆะปะธ, ั‡ั‚ะพะฑั‹ ั„ะธะปัŒั‚ั€ะพะฒะฐั‚ัŒ ะฒ ะดะฐะปัŒะฝะตะนัˆะตะผ ะดัƒะฑะปะธ
List<string> lodash_result_path = new List<string> {};

foreach(CxList lodash_result in result)
{
    // ะžั‡ะตั€ะตะดะฝะพะน ั€ะฐะท ะฟะพะปัƒั‡ะฐะตะผ ะฟัƒั‚ะธ ะบ ั„ะฐะนะปะฐะผ
	string file_name = lodash_result.GetFirstGraph().LinePragma.FileName;
	lodash_result_path.Add(file_name);
}

// ะ”ะฐะปัŒัˆะต ะธะดะตั‚ ั‡ะฐัั‚ัŒ ะพั‚ะฝะพััั‰ะฐััั ะบ html ั„ะฐะนะปะฐะผ, ั‚ะฐะบ ะบะฐะบ ะฒ ะฝะธั… ะผั‹ ะฝะต ะผะพะถะตะผ ะฟั€ะพัะปะตะดะธั‚ัŒ ะพั‚ะบัƒะดะฐ ะธะผะตะฝะฝะพ ะธะดะตั‚ ะฒั‹ะทะพะฒ
// ะคะพั€ะผะธั€ัƒะตะผ ะผะฐััะธะฒ ะฟัƒั‚ะตะน ั„ะฐะนะปะพะฒ, ั‡ั‚ะพะฑั‹ ะฑั‹ั‚ัŒ ัƒะฒะตั€ะตะฝะฝั‹ะผะธ, ั‡ั‚ะพ ัั€ะฐะฑะฐั‚ั‹ะฒะฐะฝะธั ัƒัะทะฒะธะผั‹ั… ะผะตั‚ะพะดะพะฒ ะฑั‹ะปะธ ะธะผะตะฝะฝะพ ะฒ ั‚ะตั… ั„ะฐะนะปะฐั…, ะฒ ะบะพั‚ะพั€ั‹ั… ะพะฑัŠัะฒะปะตะฝ lodash
List<string> lodash_path = new List<string> {};
foreach(CxList string_lodash in lodash_strings)
{
	string file_name = string_lodash.GetFirstGraph().LinePragma.FileName;
	lodash_path.Add(file_name);
}

// ะŸะตั€ะตะฑะธั€ะฐะตะผ ะฒัะต ัƒัะทะฒะธะผั‹ะต ะผะตั‚ะพะดั‹ ะธ ัƒะฑะตะถะดะฐะตะผัั, ั‡ั‚ะพ ะพะฝะธ ะฒั‹ะทะฒะฐะฝั‹ ะฒ ั‚ะตั… ะถะต ั„ะฐะนะปะฐั…, ั‡ั‚ะพ ะธ ะพะฑัŠัะฒะปะตะฝะธะต/ะฒะบะปัŽั‡ะตะฝะธะต lodash
foreach(CxList method in vulnerableMethods)
{
	string file_name_method = method.GetFirstGraph().LinePragma.FileName;
	if (lodash_path.Contains(file_name_method) == true && lodash_result_path.Contains(file_name_method) == false){
		result.Add(method);
	}
}

// ะฃะฑะธั€ะฐะตะผ ะฒัะต UknownReferences ะธ ะพัั‚ะฐะฒะปัะตะผ ัะฐะผั‹ะน "ะดะปะธะฝะฝั‹ะน" ะธะท ะฟัƒั‚ะตะน, ะตัะปะธ ั‚ะฐะบะธะต ะฒัั‚ั€ะตั‡ะฐัŽั‚ัั
result = result.ReduceFlow(CxList.ReduceFlowType.ReduceSmallFlow) - result.FindByType(typeof(UnknownReference));

เชเช• เช•เชพเชฐเซเชฏ: เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚ เชเชฎเซเชฌเซ‡เชก เช•เชฐเซ‡เชฒเชพ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹ เชถเซ‹เชงเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

เช‰เช•เซ‡เชฒ: เชตเชฟเชตเชฟเชง เชธเชฐเซเชตเชฐเซเชธเชจเซ‡ เชเช•เซเชธเซ‡เชธ เช•เชฐเชตเชพ เช…เชฅเชตเชพ SSL-เชชเชฟเชจเชฟเช‚เช—เชจเซ‡ เชšเช•เชพเชธเชตเชพ เชฎเชพเชŸเซ‡ เชเชชเซเชฒเซ€เช•เซ‡เชถเชจเซ‹, เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชฎเซ‹เชฌเชพเช‡เชฒ เชฎเชพเชŸเซ‡, เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹ เช…เชฅเชตเชพ เช•เซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เช…เชธเชพเชฎเชพเชจเซเชฏ เชจเชฅเซ€. เชธเซเชฐเช•เซเชทเชพเชจเชพ เชชเชฐเชฟเชชเซเชฐเซ‡เช•เซเชทเซเชฏเชฎเชพเช‚, เช†เชตเซ€ เชตเชธเซเชคเซเช“เชจเซ‡ เช•เซ‹เชกเชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเซ€ เช เชถเซเชฐเซ‡เชทเซเช  เชตเซเชฏเชตเชนเชพเชฐ เชจเชฅเซ€. เชšเชพเชฒเซ‹ เชเช• เชจเชฟเชฏเชฎ เชฒเช–เชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช เชœเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชธเชฎเชพเชจ เชซเชพเช‡เชฒเซ‹ เชฎเชพเชŸเซ‡ เชถเซ‹เชง เช•เชฐเชถเซ‡:

// ะะฐะนะดะตะผ ะฒัะต ัะตั€ั‚ะธั„ะธะบะฐั‚ั‹ ะฟะพ ะผะฐัะบะต ั„ะฐะนะปะฐ
CxList find_certs = All.FindByShortNames(new List<string> {"*.der", "*.cer", "*.pem", "*.key"}, false);

// ะŸั€ะพะฒะตั€ะธะผ, ะณะดะต ะฒ ะฟั€ะธะปะพะถะตะฝะธะธ ะพะฝะธ ะธัะฟะพะปัŒะทัƒัŽั‚ัั
CxList data_used_certs = All.DataInfluencedBy(find_certs);

// ะ˜ ะดะปั ะผะพะฑะธะปัŒะฝั‹ั… ะฟั€ะธะปะพะถะตะฝะธะน - ะผะพะถะตะผ ะฟะพะธัะบะฐั‚ัŒ ะผะตั‚ะพะดั‹, ะณะดะต ะฒั‹ะทั‹ะฒะฐะตั‚ัั ั‡ั‚ะตะฝะธะต ัะตั€ั‚ะธั„ะธะบะฐั‚ะพะฒ
// ะ”ะปั ะดั€ัƒะณะธั… ะฟะปะฐั‚ั„ะพั€ะผ ะธ ะฟั€ะธะปะพะถะตะฝะธะน ะผะพะณัƒั‚ ะฑั‹ั‚ัŒ ั€ะฐะทะปะธั‡ะฝั‹ะต ะผะตั‚ะพะดั‹
CxList methods = All.FindByMemberAccess("*.getAssets");

// ะŸะตั€ะตัะตั‡ะตะฝะธะต ะผะฝะพะถะตัั‚ะฒ ะดะฐัั‚ ะฝะฐะผ ั€ะตะทัƒะปัŒั‚ะฐั‚ ะฟะพ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธัŽ ะปะพะบะฐะปัŒะฝั‹ั… ัะตั€ั‚ะธั„ะธะบะฐั‚ะพะฒ ะฒ ะฟั€ะธะปะพะถะตะฝะธะธ
result = methods * data_used_certs;

เชเช• เช•เชพเชฐเซเชฏ: เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚ เชšเซ‡เชกเชพ เชฅเชฏเซ‡เชฒเชพ เชŸเซ‹เช•เชจเซเชธ เชถเซ‹เชงเชตเซ€

เช‰เช•เซ‡เชฒ: เช•เซ‹เชกเชฎเชพเช‚ เชนเชพเชœเชฐ เชšเซ‡เชกเชพ เชŸเซ‹เช•เชจเซเชธ เช…เชฅเชตเชพ เช…เชจเซเชฏ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชฎเชพเชนเชฟเชคเซ€เชจเซ‡ เชฐเชฆ เช•เชฐเชตเซ€ เช˜เชฃเซ€ เชตเช–เชค เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เช…เชฒเชฌเชคเซเชค, เชคเซ‡เชฎเชจเซ‡ เชธเซเชฐเซ‹เชค เช•เซ‹เชกเชจเซ€ เช…เช‚เชฆเชฐ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเซเช‚ เช เชธเชพเชฐเซ‹ เชตเชฟเชšเชพเชฐ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“ เชฌเชฆเชฒเชพเชฏ เช›เซ‡. CxQL เช•เซเชตเซ‡เชฐเซ€เช เชฎเชพเชŸเซ‡ เช†เชญเชพเชฐ, เช†เชจเชพ เชœเซ‡เชตเซ€ เชตเชธเซเชคเซเช“ เชถเซ‹เชงเชตเซ€ เชเช•เชฆเชฎ เชธเชฐเชณ เช›เซ‡:

// ะŸะพะปัƒั‡ะฐะตะผ ะฒัะต ัั‚ั€ะพะบะธ, ะบะพั‚ะพั€ั‹ะต ัะพะดะตั€ะถะฐั‚ัั ะฒ ะบะพะดะต
CxList strings = base.Find_Strings();

// ะ˜ั‰ะตะผ ัั€ะตะดะธ ะฒัะตั… ัั‚ั€ะพะบ ะฝัƒะถะฝะพะต ะฝะฐะผ ะทะฝะฐั‡ะตะฝะธะต. ะ’ ะฟั€ะธะผะตั€ะต ั‚ะพะบะตะฝ ะฒ ะฒะธะดะต ัั‚ั€ะพะบะธ "qwerty12345"
result = strings.FindByShortName("qwerty12345");

เชจเชฟเชทเซเช•เชฐเซเชท

เชนเซเช‚ เช†เชถเชพ เชฐเชพเช–เซเช‚ เช›เซเช‚ เช•เซ‡ เช† เชฒเซ‡เช– เชคเซ‡ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชถเซ‡ เชœเซ‡เช“ เชšเซ‡เช•เชฎเชพเชฐเซเช• เชŸเซ‚เชฒ เชธเชพเชฅเซ‡ เชคเซ‡เชฎเชจเซ€ เช“เชณเช–เชพเชฃ เชถเชฐเซ‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡. เช•เชฆเชพเชš เชœเซ‡เช“ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏเชฅเซ€ เชชเซ‹เชคเชพเชจเชพ เชจเชฟเชฏเชฎเซ‹ เชฒเช–เซ€ เชฐเชนเซเชฏเชพ เช›เซ‡ เชคเซ‡เช“เชจเซ‡ เชชเชฃ เช† เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพเชฎเชพเช‚ เช•เช‚เชˆเช• เช‰เชชเชฏเซ‹เช—เซ€ เชฒเชพเช—เชถเซ‡.

เช•เชฎเชจเชธเซ€เชฌเซ‡, เชนเชพเชฒเชฎเชพเช‚ เชเชตเชพ เชธเช‚เชธเชพเชงเชจเชจเซ‹ เช…เชญเชพเชต เช›เซ‡ เชœเซเชฏเชพเช‚ เชšเซ‡เช•เชฎเชพเชฐเซเช•เซเชธเชจเชพ เชจเชฟเชฏเชฎเซ‹เชจเชพ เชตเชฟเช•เชพเชธ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชจเชตเชพ เชตเชฟเชšเชพเชฐเซ‹ เชฎเซ‡เชณเชตเซ€ เชถเช•เชพเชฏ. เชคเซ‡เชฅเซ€ เชœ เช…เชฎเซ‡ เชฌเชจเชพเชตเซเชฏเซเช‚ เช›เซ‡ Github เชชเชฐ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€, เชœเซเชฏเชพเช‚ เช…เชฎเซ‡ เช…เชฎเชพเชฐเซเช‚ เช•เชพเชฐเซเชฏ เชชเซ‹เชธเซเชŸ เช•เชฐเซ€เชถเซเช‚ เชœเซ‡เชฅเซ€ CxQL เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชจเชพเชฐ เชฆเชฐเซ‡เช• เชตเซเชฏเช•เซเชคเชฟ เชคเซ‡เชฎเชพเช‚ เช•เช‚เชˆเช• เช‰เชชเชฏเซ‹เช—เซ€ เชถเซ‹เชงเซ€ เชถเช•เซ‡ เช…เชจเซ‡ เชธเชฎเซเชฆเชพเชฏ เชธเชพเชฅเซ‡ เชคเซ‡เชฎเชจเซเช‚ เช•เชพเชฐเซเชฏ เชถเซ‡เชฐ เช•เชฐเชตเชพเชจเซ€ เชคเช• เชชเชฃ เชฎเซ‡เชณเชตเซ€ เชถเช•เซ‡. เชญเช‚เชกเชพเชฐ เชธเชพเชฎเช—เซเชฐเซ€ เชญเชฐเชตเชพ เช…เชจเซ‡ เชธเช‚เชฐเชšเชจเชพ เช•เชฐเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เช›เซ‡, เชคเซ‡เชฅเซ€ เชซเชพเชณเซ‹ เช†เชชเชจเชพเชฐเชพเช“เชจเซเช‚ เชธเซเชตเชพเช—เชค เช›เซ‡!

เชคเชฎเชพเชฐเซเช‚ เชงเซเชฏเชพเชจ เชฌเชฆเชฒ เช†เชญเชพเชฐ!

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹