Bỏ qua, tới nội dung chính
Cà Phê & Code Cà Phê & Code
  • Trang chủ
  • Bài viết
    • Chuyên mục
    • Backend
    • Bảo mật
    • Bảo mật ứng dụng web
    • Công cụ
    • Cơ sở dữ liệu
    • DevOps
    • Docker
    • Giải thuật
    • Go
    • Hệ điều hành
    • Hệ thống
    • Java
    • Kiến trúc hệ thống
    • Lập trình
    • Lập trình Go
    • Linux
    • Mang
    • Mạng
    • Message Queue
    • Odoo
    • RabbitMQ
    • Spring
    • Trình biên dịch
    • Vert.x
    • Web

    • Xem tất cả
    • Chuyên mục
    • Sê-ri
    • Thẻ
  • Luyện thi
  • Ghi chú
  • Thiết kế CSDL
  • Thông tin
    • Giới thiệu
    • Liên hệ
Đăng nhập
  1. Trang chủ
  2. Chuyên mục
  3. Odoo

Odoo

Theo dõi riêng chuyên mục này 400 bài viết
Odoo 18/09/2026 4 phút

Kiểm thử JavaScript trong Odoo 19: QUnit đã lùi, Hoot lên thay — viết một test và xem nó xanh ở /web/tests

Odoo 19 chuyển bộ khung test frontend từ QUnit sang Hoot: cú pháp describe/test/expect gọn như Jest. Viết một test cho hàm thuần, khai vào bundle unit test, và chạy nó thật trên trình chạy /web/tests.

#odoo#odoo-19#hoot#developer#lap-trinh#owl
21
Odoo 18/09/2026 3 phút

Cái khối kéo–thả trong trình dựng website Odoo thật ra chỉ là một đoạn HTML: viết snippet đầu tiên của bạn

Snippet là khối nội dung người dùng kéo–thả vào trang bằng trình dựng website. Nó chỉ là một template <section> HTML, cộng một dòng đăng ký vào bảng chọn. Tạo một snippet thật và render nó trên Odoo 19.

#website#odoo#odoo-19#developer#lap-trinh#snippet
22
Odoo 18/09/2026 3 phút

Cái avatar tròn cạnh tên người bạn thấy khắp Odoo: many2one_avatar — một chữ widget, không dòng JS nào

many2one_avatar hiển thị một field Many2one kèm ảnh đại diện của bản ghi liên quan. Có biến thể riêng cho user, nhân viên. Không ảnh thì tự vẽ avatar-chữ-cái. Thấy thật trên kanban Odoo 19.

#widget#odoo#odoo-19#developer#many2one#lap-trinh
22
Odoo 18/09/2026 4 phút

Tách một thẻ thành component riêng và truyền dữ liệu xuống: props trong OWL

Ứng dụng thật gồm nhiều component lồng nhau. Cha truyền dữ liệu xuống con qua props — một chiều, có kiểm kiểu. Con chỉ đọc, không sửa. Dựng component con TheCard nhận props thật trên Odoo 19.

#props#odoo#odoo-19#developer#lap-trinh#owl
30
Odoo 18/09/2026 7 phút

_t('Save') ra 'Lưu', còn tên quán của bạn thì giữ nguyên: cách Odoo 19 dịch chuỗi ngay trong JavaScript

Hàm _t bọc mọi chuỗi hiển thị trong front-end Odoo để nó tự đổi theo ngôn ngữ người dùng. Mổ xẻ nguồn dữ liệu, cơ chế 'lười' mới của Odoo 19 (bỏ hẳn _lt), và các kiểu tham số — qua _t gõ thẳng trên hệ thống thật.

#dich-thuat#odoo#odoo-19#developer#i18n#lap-trinh#owl
21
Odoo 18/09/2026 4 phút

Kiểm thử cả một luồng người dùng, không chỉ một hàm: tour của Odoo bấm nút và điền form giúp bạn

Tour là kịch bản mô phỏng người dùng đi qua nhiều bước trên UI thật — bấm, điền, chuyển màn hình. Dùng để kiểm thử end-to-end (và làm hướng dẫn onboarding). Viết một tour và chạy nó thật trên Odoo 19, thấy SUCCEEDED.

#odoo#odoo-19#testing#developer#tour#lap-trinh
22
  • 1
  • …
  • 13
  • 14
  • 15
  • 16
  • 17
  • …
  • 67

Trang 15 / 67 — tổng 400 bài viết

Tìm kiếm
Admin

Nhấp một ngụm cà phê, viết thêm một dòng code

Xem thêm
Chuyên mục
  • Odoo 400
  • Lập trình 296
  • Giải thuật 270
  • Cơ sở dữ liệu 237
  • Lập trình Go 133
  • DevOps 114
  • Java 100
  • Hệ điều hành 90
  • Docker 68
  • Spring 60
  • Go 60
  • Bảo mật 57
  • Linux 54
  • Vert.x 50
  • Mạng 45
  • Trình biên dịch 45
  • RabbitMQ 40
  • Backend 40
  • Message Queue 40
  • Công cụ 30
  • Web 18
  • Hệ thống 12
  • Kiến trúc hệ thống 12
  • Bảo mật ứng dụng web 1
Xem nhiều nhất
Bốn mươi dòng kiểm trước khi bấm nút triển khai — mỗi dòng đến từ một lần đã hỏng 10/08/2026 · 190
900 lần chạy test không bắt được lỗi luôn nằm đó — thêm một dòng sleep, nó lộ ra 100% 05/08/2026 · 156
Cùng một jar, ảnh Docker từ 866 MB xuống 126 MB — và cái bẫy làm ảnh nhỏ nhất in tiếng Việt ra dấu hỏi 06/08/2026 · 131
Integer 127 == 127 cho true, nhưng 128 == 128 cho false — vì sao, và bẫy đó ẩn ở đâu 05/05/2026 · 119
Một dòng println nở ra sáu lệnh, dấu cộng nối chuỗi biến thành invokedynamic — mở file .class ra xem 04/05/2026 · 108
Thẻ phổ biến
#zero-to-hero#do-dac#hieu-nang#odoo#odoo-19#golang#go#postgresql#developer#devops#lap-trinh#sql#java#database#huong-dan#he-dieu-hanh#backend#toi-uu#bao-mat#100-ngay-java#docker#trinh-bien-dich#container#linux#redis#dong-thoi#csdl#docker-compose#spring#kafka#kubernetes#web#giai-thuat#message-queue#giam-sat#mang#van-hanh#vertx#performance#cau-truc-du-lieu#co-so-du-lieu#kien-truc-may-tinh#quan-sat#http#orm#rabbitmq#concurrency#kien-truc#view#ke-toan#owl#index#microservice#observability#grpc#testing#reactive#runtime#cong-cu#kho#monitoring#networking#security#bo-nho#qweb#debug#distributed-systems#git#mat-ma#version-control#api#gc#resilience#website#websocket#caching#crm#data-structures#prometheus#protobuf#rest#serialization#collections#compression#nhan-su#regex#search#thiet-ke#tls#tong-ket#ban-hang#cau-hinh#context#controller#do-tin-cay#elasticsearch#gioi-thieu#interface#probabilistic#shell#algorithms#bao-cao#command-line#compiler#he-thong-lon#json#mua-hang#nen-du-lieu#regular-expression#streaming#system-design#unix#cache#ecommerce#jvm#openssl#owasp#realtime#report#spring-boot#stream#vacuum#bloat#distributed#jpa#metrics#replication#san-xuat#action#checklist#gzip#io#logging#network#planner#retry#spring-security#tcp#test#tracing#architecture#benchmark#chan-doan#du-an#explain#http2#oop#phan-quyen#pprof#encoding#event-bus#generics#goroutine#jmh#join#latency#memory#module#mrp#mvcc#scheduler#ton-kho#transaction#wal#amqp#bloom-filter#email#error#exchange#heap#idempotency#kanban#lien-he#luong-ao#opentelemetry#phan-vung#sharding#spring-amqp#statistics#thanh-toan#backpressure#bat-dong-bo#binary#connection-pool#deadlock#debugging#form#functional#go-loi#load-balancing#map#middleware#nginx#pipeline#profiling#quality#rate-limiting#routing#rpc#spring-mvc#sre#wizard#aes#assets#atomic#automation#backtracking#bat-bien#build#bytecode#cardinality#channel#chatter#closure#cong-no#connection-pooling#consumer#cpu#domain#etcd#histogram#hot-update#https#isolation#jwt#list#log#migration#mutex#namespace#percentile#re2#san-pham#scss#slice#sse#syscall#testcontainers#timeout#trien-khai#tu-dong-hoa#unicode#widget#wire-format#zstd#allocation#assembly#authentication#backoff#backup#bash#bom#cas#chat-luong#circuit-breaker#cqrs#csrf#deploy#dich-vu-khach-hang#dlx#dockerfile#do-tre#ecdsa#entropy#erp#error-handling#escape-analysis#event-driven#event-loop#exception#frontend#grep#group-by#hashing#hash-table#helpdesk#hmac#hoa-don#inheritance#integration-test#interceptor#iterator#jackson#jaeger#javascript#jdbc#kieu-du-lieu#lambda#lock#lock-free#lo-trinh#lua#luu-tru#mat-khau#maven#multiplexing#nha-cung-cap#outbox#pagination#partition#pgbouncer#phe-duyet#portal#pubsub#quan-ly-cong-viec#queue#raft#rang-buoc#recovery#reflect#reflection#secrets#server-action#snippet#socket#status-code#string#tim-kiem#toolchain#tuy-bien#varint#vertx-web#work-mem#x509#xac-thuc#xpath#activity#aead#aggregate#alignment#analytics#analyze#async#auth#autovacuum#awk#bao-gia#bao-tri#barcode#batch#bat-dau#bcrypt#bien-the#big-o#brotli#button#byte#certificate#cgroup#chacha20#cham-cong#checkpoint#chi-phi#chuan-hoa#chung-chi#cluster#codegen#collectors#commit#consensus#consistent-hashing#constant-time#constraint#consumer-group#consumer-lag#copy#cors#count-min-sketch#coverage#cron#cross-compile#crud#csp#cte#da-cong-ty#database-sql#ddl#deadline#default#delete#delivery-semantics#delve#dependency-inversion#devirtualization#dich-thuat#dictionary#dinh-gia-ton-kho#distributed-lock#dns#do-ben#dynamic-programming#embed#event-sourcing#fan-out#fanout#field-widget#fillfactor#full-page-writes#full-text-search#future#fuzzing#giao-dich#giao-dien#giao-hang#goroutine-leak#graph#greedy#ha#handshake#hash#health-check#heartbeat#he-thong#hikaricp#hoat-dong#hooks#hop-dong#hyperloglog#i18n#inlining#inverted-index#ir-cron#itab#java-time#jdk#jfr#jit#jsonb#junit#keep-alive#ke-thua#ket-noi#khoa#lead#lru#luong#many2one#memory-leak#menu#merge#metadata#microservices#model#mtls#nap-du-lieu#ngan-hang#nghi-phep#nhap-du-lieu#optimization#optional#ordering#padding#parallel#partitioning#pattern-matching#pbkdf2#pg_dump#phan-tich#phan-trang#plan9#port#prefetch#prepared-statement#proc#property-based-testing#python#quorum-queue#race-detector#rate-limit#rebase#record#recordset#registry#replica#retention#reverse-proxy#rfc6455#rsa#saga#sampling#sap-xep#scalability#scaling#schema#schema-evolution#sealed#sed#seo#service-discovery#session#signal#singleflight#skip-locked#sliding-window#slog#sort#stack#strace#struct#tai-nguyen#theme#thread#throughput#thue#tich-hop#tieng-viet#time#timezone#timing-attack#toast#token#transientmodel#trigram#ttl#tuyen-dung#type-parameter#unsafe#upload#validation#window-function#worker-pool#wraparound#xay-dung-web#xml#x-sync#xz#zigzag#2fa#abstract-model#access-control#ack#active-ids#actuator#addons#aggregation#alerting#alertmanager#allocator#amazon#analytic#analyzer#anchor#an-toan#aof#api-design#api-key#append#approvals#argon2#assert#at-least-once#attachment#attendances#audit#authorization#autoboxing#autocomplete#automated-action#avro#backlog#backreference#bandwidth#bang-dieu-khien#bang-gia#ban-hang-online#bao-cao-tai-chinh#barrier#batch-insert#bce#bearer-token#benchmem#benchstat#bfs#bidirectional#bigdecimal#bigkey#bigtable#binary-search#binding#bind-mount#bisect#blockingqueue#blog#bm25#bool-query#bounds-check#boxing#branch#brin#broadcast#brute-force#bst#bucket#budget#buffer#build-context#build-tags#bulk#bulkhead#bulk-load#but-toan#bzip2#cache-hit-ratio#cache-line#calendar#cam-bay#cancellation#ca-nhan-hoa#canh-bao#capture-group#cassandra#cay-can-bang#cbc#cbor#cgo#cham-gio#character-class#chart-of-accounts#chat#cherry-pick#chmod#chu-ky-so#chunked#ci#c-interop#classloader#classpath#clean-architecture#client-action#clocks#cloudflare#codec#code-generation#collision#command#command-injection#comparator#comparison#compatibility#compile-time#completablefuture#component#compose#composite#computed#concurrenthashmap#conditional-compilation#config#configuration#conflict#cong-doan#cong-tac#consistency#constructor#contract-testing#con-tro#con-tro-ham#cookie#core-dump#coredump#coroutine#cost#cost-model#cot-moc#crdt#criteria#cross-origin#cryptography#csprng#css#cuckoo-filter#curl#cut#dag#da-hinh#da-ngon-ngu#danh-gia#danh-so#dashboard#data-processing#datetime#dce#ddd#dead-code#dead-letter-queue#decoder#deduplication#default-method#deflate#delegation#delta#demo-data#dependencies#dependency-injection#deployment#deque#detached-head#developer-mode#dev-mode#devtools#dfa#dfs#dia-chi#dialog#dieu-chuyen#dieu-khien#dieu-kien#diffie-hellman#dijkstra#dinh-kem#directive#discord#discuss#disk#display-name#distinct#distributed-transaction#dlv#dockerignore#doi-chieu#doi-sales#doi-soat#do-luong#domain-driven-design#don-hang#don-mua#don-vi-tinh#do-phuc-tap#download#dto#dual-write#du-bao#du-lieu#durability#dynamo#ecb#ecdh#editor#effective-cache-size#effective-io-concurrency#elliptic-curve#email-marketing#embed-fs#employees#encapsulation#entity#enum#env#envelope-encryption#ep-kieu#epoll#equals#errgroup#error-boundary#etag#evacuation#event#eviction#exactly-once#executor#exists#exit-code#expvar#fail-fast#failover#failure-detection#fallback#false-sharing#fault-injection#federation#feed#fencing-token#fetch#ffi#field#file-descriptor#filestore#filter#finalizer#find#flaky#flaky-tests#flatbuffers#flatmap#flyway#forkjoin#form-view#for-update#frame#fsck#full-text#functional-core#functional-options#fuzzy#garbage-collector#gcm#gctrace#geohash#geospatial#getter#get-view#gia#giay-bao-co#gin#gist#gitignore#gitops#gob#godebug#gogc#go-generate#golangci-lint#golden-file#gomaxprocs#gomemlimit#gomock#go-modules#google#goos#gop-du-lieu#go-redis#gorilla#gossafunc#gossip#go-vet#govulncheck#go-work#graalvm#graceful-degradation#graceful-shutdown#gradle#group#groups#grpcurl#gtgt#h3#hàm-bậc-cao#handle#hang-doi#happens-before#haproxy#hashcode#hashicorp#hashmap#hazelcast#header#headers#heavy-hitters#helm#help#hexagonal#hibernate#hmap#hoa-don-dien-tu#hoan-tien#hook#hoot#hot-standby#hsts#html#http3#huffman#huge-pages#idempotence#id-generation#idor#iface#image#image-size#indexing#index-only-scan#inherit#inherits#init#inner-class#instagram#internals#invoicing#iot#iptables#ir-attachment#ir-sequence#isolation-level#isr#iter-pull#iter-seq#jaccard#javac#javap#jitter#jlink#jmm#job-queue#journal#jsonrpc#jstack#kek-dek#key-rotation#keyset#khach-hang#khau-hao#khoa-chinh#khoa-cong-khai#khoa-ngoai#khoa-so#khuyen-mai#kiem-ke#kiem-soat#kiem-thu#kien-hang#kiosk#knowledge#ky-dien-tu#ky-nang#ky-online#lag#lap-lich#lateral#layer#lazy#lazy-load#lazy-queue#leader-election#leak#level#like#linear-search#linker#linkname#linter#list-view#livelock#load-average#load-shedding#load-test#locality#lock-date#locking#log-compaction#logical#logical-replication#logs#long-polling#lookahead#lookaround#lookbehind#lo-serial#lost-update#lucene#lz4#lz77#ma-hoa#mail#mail-activity#mail-mail#mail-template#mail-thread#maintenance#maintenance-work-mem#management#many2many#mapping#mapstructure#match#materialize#mau-bao-gia#mau-email#ma-vach#max-connections#media#memcached#memoization#memory-hard#memory-mapped-file#memory-model#merge-join#mergesort#message#messagepack#message-post#messaging#metaprogramming#method#microbenchmark#minhash#mixin#mmap#mock#mockgen#mocking#mockito#moi-truong#monetary#monorepo#mo-rong#mount#multiline#multi-stage#mutation-testing#nagle#name-search#nang-cap#native-image#nen-file#net-http#netpoller#network-partition#nfa#ngan-sach#nguoi-dung#nhan-hang#nhap-kho#nhat-ky#nhieu-buoc#nio#no-co#noinline#non-root#notification#n-plus-1#numeric#oauth2#oca#offset#oidc#onchange#on-conflict#one2many#operations#or#order#overlayfs#p99#pacing#package#packfile#panic#paperformat#partition-management#partition-pruning#partition-wise-join#password#password-hashing#patch#path-traversal#patterns#payment#pdb#pdf#pecs#perf#persistence#pgbadger#pg_basebackup#pgbench#pg-locks#pgo#pg-repack#pg_restore#pg_rewind#pg-stat-statements#pgstattuple#pg-trgm#phan-bo#phan-tan#phoi-hop#phong-ban#phu-thuoc#pid#pipe#pitr#pivot#plan-cache#plugin#poison-message#poly1305#ports-adapters#post-mortem#preemption#preflight#priority-queue#process#producer#production#projection#promise#promql#properties#props#ps#publication#publisher-confirms#push#pylint#qos#qrcode#quan-he#quantifier#quantile#query-dsl#quic#quicksort#quoting#quyen#quy-trinh#race#random#random-page-cost#range-over-func#range-request#rapid#rdb#read-model#read-replica#rebalance#reconnect#recruitment#recursive#red#redelivery#redirect#red-method#redos#ref#reference#reflog#reindex#related#relevance#reliability#remote-debug#replication-slot#repository#requests#res-company#resource#rest-api#restclient#resume#rfq#ripgrep#rle#rootfs#ro-ri-bo-nho#round-robin#route#router#routes-rules#rss#runbook#run-length-encoding#runqueue#safe-eval#sao-ke#sao-luu#sargable#saturation#scaffold#scale#schedtrace#scheduled#scheduled-action#script#scylladb#sdkman#search-after#secure-coding#security-header#select#selection#semaphore#sendfile#separator#serializable#servlet#set#set-e#sha256#shannon#shard#shared-buffers#shellcheck#shortest-path#shovel#side-channel#sign#simd#sitemap#size-class#sketch#sla#slf4j#slice-header#slices#slots#smart-button#snapshot#snapshot-testing#so-cai#sockjs#so-do-to-chuc#solid#sorting#source-code#span#spring-data#sqlc#sql-injection#ssa#ssd#stackoverflow#stack-trace#staging#stampede#starvation#stash#static-analysis#staticcheck#status#statusbar#stenciling#stop-the-world#storage#streams#stringer#stripe#struct-tag#structured-concurrency#studio#stw#submodule#subquery#subscription#substitution#sudo#su-kien#summary#switch#sync#sync-cond#synchronized#synchronous-commit#sync-map#sync-pool#syscall-js#sysmon#systray#table-driven#tagged#tai-dat-hang#tai-khoan#tail-latency#tai-san#tang-truong#tar#t-call#tcp-keepalive#t-digest#template#test-double#testing-quick#text#text-keyword#text-processing#t-field#t-foreach#thao-tac-hang-loat#the-phan-loai#thiet-ke-api#thiet-lap#threadlocal#thread-pool#thuc-hanh#thue-gtgt#thundering-herd#thymeleaf#tien-te#timeline#time-off#time-wait#tinh-phi#tiny-allocator#tls13#toan-tu#token-bucket#tokenizer#to-khai#top#topic#top-k#topology#totp#tour#toxiproxy#transactioncase#transaction-pooling#transactions#transient-model#tra-truoc#tree#treemap#tricolor#tri-thuc#truncate#tuning#tuyen-duong#twitter#ty-gia#type-assertion#typed-nil#type-erasure#type-inference#type-safety#type-set#type-switch#uber#udp#uintptr#ulimit#ung-dung#union#uniq#unit-test#unlink#unlogged#unsafe-pointer#update#upgrade#upsert#use#use-method#useref#useservice#usestate#utf-8#uuid#ux#vacuum-full#value-object#varargs#verticle#veth#vhost#viet-nam#viettel#visibility-map#volatile#volume#vsz#vulnerability#wait-events#wal-compression#wasi#wasm#webassembly#web-client#webclient#webhook#werkzeug#wire#word-boundary#word-splitting#worker#workers#workspace#work-stealing#worktree#write#write-barrier#write-skew#xac-thuc-hai-lop#xargs#xml-id#xmlrpc#xoay-khoa#xss#x-time#xuat-du-lieu#xuat-kho#yield#zero-copy#zero-trust#zlib
Lưu trữ
  • Tháng 9/2026 1745
  • Tháng 8/2026 197
  • Tháng 7/2026 114
  • Tháng 6/2026 64
  • Tháng 5/2026 30
  • Tháng 11/2025 4
  • Tháng 10/2025 27
  • Tháng 9/2025 30
  • Tháng 8/2025 31
  • Tháng 7/2025 30
Theo dõi blog

Nhận email mỗi khi có bài viết mới. Không quảng cáo, huỷ bất cứ lúc nào.

Hoặc dùng RSS
Cà Phê & Code Cà Phê & Code

Cà Phê & Code là blog dành cho những người yêu công nghệ và lập trình. Nơi chia sẻ kiến thức coding, công cụ hữu ích, xu hướng công nghệ, kinh nghiệm phát triển phần mềm và những câu chuyện phía sau màn hình — tất cả được kể theo cách gần gũi, dễ hiểu, như một cuộc trò chuyện bên tách cà phê.

Liên kết
  • Trang chủ
  • Chuyên mục
  • Thẻ
  • Giới thiệu
  • Liên hệ
Chuyên mục nổi bật
Odoo (400)Lập trình (296)Giải thuật (270)Cơ sở dữ liệu (237)Lập trình Go (133)DevOps (114)Java (100)Hệ điều hành (90)Docker (68)Spring (60)Go (60)Bảo mật (57)Linux (54)Vert.x (50)Mạng (45)Trình biên dịch (45)RabbitMQ (40)Backend (40)Message Queue (40)Công cụ (30)Web (18)Hệ thống (12)Kiến trúc hệ thống (12)Bảo mật ứng dụng web (1)

© 2026 Cà Phê & Code. Bảo lưu mọi quyền.